Tag: eof

确定EOF表达

我需要validation表达式getchar() ! = EOF getchar() ! = EOF为0或1 。 我目前的代码: #include int main (int argc, char *argv[]) { int c; while (( c= getchar()) != EOF) { printf(“%d “, c != EOF); putchar(c); } printf(“\n%d\n”, c != EOF); } 当我尝试运行时,我得到了 98980980 1 91 81 91 81 01 91 81 01 我不确定我是否做对了。 编辑: 好的问题实际上是“如何生成EOF”,解决方法是按ctrl + D.

而scanf EOF循环行为不当

我是C的初学者,我遇到了一些我无法弄清楚的问题,并且无法在其他线程上找到解决方案。 我正在尝试使用以下代码从键盘输入/ txt文件中读取整数: int grades[MAX_GRADES_LENGTH]={0}, histogram[HISTOGRAM_SIZE]={0}; int maxGradesHistogramBucket=0, median=0, gradesLength=0; double avg=0.0; int grade=0; printf(“Enter grades:\n”); while (scanf(“%d”,&grade) != EOF) { grades[gradesLength]=grade; gradesLength=gradesLength+1; } 我应该在grades []数组中设置这些“等级”并计算循环中数组的长度。 不知怎的,循环行为不端,似乎有些输入对循环没问题,但是对于某些输入(实际上大部分都是),scanf()不会得到EOF,无论它是文件的实际结尾,还是^ D终端中的命令。 我听说scanf()不是读取数据最可靠的方法,但遗憾的是我不能使用其他任何东西,因为我们没有在课堂上学过任何其他方法,所以我们只能在我们的作业中使用scanf()。 我试图用== 1更改!= EOF并且它们都一样。 输入 100 0 90 10 80 20 70 30 60 40 50 例如它工作正常。 但是对于输入: 0 50 100 循环是无限的。 我正在使用macbook pro btw(如果重要的话)。 有任何想法吗?

在fgets While循环时检测EOF

我使用fdopen和fgets循环遍历TCP套接字输入的每一行: int connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); FILE *f; char line[1024]; f = fdopen(connfd, “a+”); while(fgets(line, sizeof(line), f) != NULL) { printf(“%s”, line); } printf(“EOF”); fclose(f); 问题是,由于某些奇怪的原因, fgets似乎永远不会返回NULL 。 有没有其他方法来检查EOF ?

无法读取C中的EOF字符

我在读取C中最后一个输入的EOF字符时遇到问题 j=0; while(*(name2+j)!=’\n’){ if(*(name2+j) == ‘ ‘){ j++; continue; } d[tolower(*(name2+j))]++; j++; } 对于最后一个输入,没有换行符号,对于非常小的字符串,j的值被设置为非常大的数字。 所以,考虑到文件的结尾,我修改了while条件 while(*(name2+j)!=’\n’ && (*(name2+j))!=EOF) 但我仍然遇到同样的问题。 有人能说出我在这里遗失了什么吗? 谢谢。

使用fgets()检测EOF,其中filesteam是stdin

一点背景,我正在编写一个程序,它在linux命令行中运行游戏“盒子”并用C语言编写。有一个等待用户输入的提示,然后用fgets()读取并解释等。 作为任务规范的一部分,如果我在等待用户输入时达到“文件结束”,则必须返回特定错误。 我知道fgets()在达到EOF时会返回null …但是我说 fgets(input,max_buffer,stdin); 在提示循环中如果用户提前退出用CTRL + C或CTRL + D说这是否意味着输入== NULL? 我甚至可以检测用户何时使用fgets执行此操作? 只是想试试这个问题,提前感谢任何帮助。 (OS:UNIX)(编译:gcc – c90)

伴随其他值时的EOF行为

*注意:我正在使用Windows,所以EOF对我来说是ctrl + Z. 有一段时间我注意到,EOF输入在隔离方面的行为似乎与其他输入时相同。 例如, ^Z (命令提示符中的Windows的EOF命令)和a^Z似乎在以下代码中导致不同的行为: #include #define MAX 1000 int getline(char s[]); main() { int line; char arr[MAX]; while( (line = getline(arr)) != EOF) printf(“%s”,arr); system(“Pause”); return 0; } int getline(char s[]) { int c, i = 0; while ((c = getchar()) != EOF && c != ‘\n’) { s[i++] = c; } […]

关于while(!EOF)的问题

我从stdin读取值,我想继续阅读文件,直到我完成阅读,所以我正在使用 while(!EOF){ scanf(…) } 但是,代码片段似乎没有做任何事情, while(!EOF){ scanf(“%d %d %d %d”, &imageWidth, &imageHeight, &safeRegionStart, &safeRegionWidth); printf(“—imageWidth=%d imageHeight=%d safeRegionStart=%d safeRegionWidth=%d—\n”, imageWidth, imageHeight, safeRegionStart, safeRegionWidth); totalP = imageWidth * imageHeight ; totalSafeP = imageHeight * safeRegionWidth; printf(“—total # of pixels: %d Total # of safe Pixels: %d—\n\n”, totalP, totalSafeP); i=1; while(i!=totalP) { i++; scanf(“%d”, &pixel); printf(“\nValue of pixel […]

在stdin中被视为EOF?

即使在我继续输入换行符后,我的Visual Studio仍在等待输入。 例如: while ((c = fgetc(stdin)) != EOF) { // do something } 我应该输入什么将EOF发送到Visual Studio?

字数统计程序 – stdin

对于以下问题 , 编写一个程序,将英文文本读入数据结尾(类型控制-D表示终端数据结束,见下文检测),并打印字长计数,即长度字总数发生了1次,长度为2次,依此类推。 将单词定义为字母字符序列。 您应该允许最多25个字母的单词长度。 典型输出应该是这样的: length 1 : 10 occurrences length 2 : 19 occurrences length 3 : 127 occurrences length 4 : 0 occurrences length 5 : 18 occurrences …. 要读取数据结尾的字符,请参阅上述问题。 这是我的工作解决方案, #include int main(void){ char ch; short wordCount[20] = {0}; int count = 0; while(ch = getchar(), ch >= 0){ if(ch == […]

输入缓冲区刷新

考虑以下代码: #include int main(){ char c; while( ( c=getchar() ) != EOF ) printf(“%c\n”,c); return 0; } 我给出了输入:hi ^ Z. 输出是: h i (an arrow pointing towards left) [抱歉,我找不到上面箭头的字符。 ] 有人可以解释输出吗? 由于^ Z是字符串的一部分,并且有要冲洗的字符,我认为^ Z不应该被传递,因此输出应该是, h i (new line ) PS – 我在Windows和^ Z因此是EOF。