为什么oj自动结束输入,而本地IDE不能

博客详细解释了在不同环境下,C++代码中使用cin读取字符串时如何判断输入结束的问题。在本地IDE中,需要输入Ctrl+Z来发送EOF结束输入,而在在线评测系统(OJ)上,由于直接读取数据文件,通常已包含EOF,因此能够正确结束。此问题关乎到输入流的处理和不同平台的交互差异。

最近在做CCF的题,然后如下代码让我很奇怪

string s;
while(cin>>s){
};

这个段代码在自己的IDE上输入就会存在一个问题,不论输入什么,字符串t都能顺利读入,cin>>s无法成为false也就是无法退出循环。但是放在OJ上测试却可以成功的结束,得到了满分。

原因如下:

输入结束需要让cin>>t变成false,如果在自己的电脑上windows需要在输入数据结束后再输入一个Ctrl+Z(EOF字符)来告诉输入结束。而再OJ上并不是通过键盘输入实现的,而是通过读入数据文件实现的,而且OJ平台默认再数据后加上EOF字符,所以这段代码再自己电脑上需要自己输入EOF结束,而OJ上却会自动结束,顺利通过。

版权声明:本文为优快云博主「SDUHXP」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_41053564/article/details/81449077

我在网上oj刷c语言的题,我现在想用clion对代码进行调试,然后网上oj可以下载代码到本地进行调试,我把oj上的代码下载下来以后不会进行调试,我该怎么做,我的clion已经配置好,并且可以进行多个主程序的运行,下载下来的名为main.c的程序内部是这样的 #include <stdlib.h> #include <stdio.h> #include <stdbool.h> #include "securec.h" #include "solution.c" // 以下为考题输入输出框架,此部分代码不建议改动;提交代码时请勿包含下面代码 static int *ExpandListInt(int *ptr, size_t oldLen, size_t newLen) { int *newPtr = (int *)malloc(newLen * sizeof(*ptr)); if (newPtr) { for (size_t i = 0; i < oldLen; ++i) { newPtr[i] = ptr[i]; } } if (ptr) { free(ptr); } return newPtr; } static void SkipWs(void) { char c = (char)getchar(); while (c == ' ' || c == '\r' || c == '\n') { c = (char)getchar(); } (void)ungetc(c, stdin); } static void FreeListInt(int *value) { if (!value) { return; } free(value); } static bool ReadListInt(int **value, size_t *size) { SkipWs(); char c = (char)getchar(); if (c != '[') { return false; } SkipWs(); c = (char)getchar(); if (c == ']') { *value = NULL; *size = 0; return true; } (void)ungetc(c, stdin); size_t cap = 32; for (size_t pos = 0;; ++pos) { if (pos == 0 || pos >= cap) { cap *= 2; *value = ExpandListInt(*value, pos, cap); if (*value == NULL) { break; } } if (scanf_s("%d", &(*value)[pos]) != 1) { break; } SkipWs(); int in = getchar(); if (in == EOF) { break; } if ((char)in == ']') { *size = pos + 1; return true; } if ((char)in != ',') { break; } } FreeListInt(*value); *value = NULL; return false; } int main(void) { int *favorites = NULL; size_t favoritesSize = 0; int *presents = NULL; size_t presentsSize = 0; int returnValue = 0; bool isOk = false; do { if (!ReadListInt(&favorites, &favoritesSize)) { break; } if (!ReadListInt(&presents, &presentsSize)) { break; } isOk = true; returnValue = GetUnselectedNum(favorites, favoritesSize, presents, presentsSize); printf("%d", returnValue); } while (false); if (!isOk) { printf("Error: Input format incorrect!"); } FreeListInt(favorites); favorites = NULL; FreeListInt(presents); presents = NULL; return 0; } 名为solution.c的程序内部是这样的 static int GetUnselectedNum(const int *favorites, size_t favoritesSize, const int *presents, size_t presentsSize) { return 0; } 我将solution的函数在自己的项目内起名为hw663.c,在自己的本地clion将函数写完,然后下载了上述的两个文件,我该如何在本地ide调试代码debug?请你给出尽可能详细且可操作性强的步骤,并注意我的基础很弱,篇幅不限,越详细越好
08-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值