scanf没有终止
所以,我有以下代码(C):
char c = getc(in); if (c == '(') ... if (c == '%') ... if (isdigit(c)) { int n; ungetc(c, in); scanf("%i", &n); ... }
当我从stdin读取输入时,一切都很好,但是,当从文件中读取输入时,对scanf
的调用不会终止。
我在调用周围添加了一些代码,看看在调用scanf
之前发生了什么。 一个这样的例子是
-
c = '0'
-
c
之后的人物是)
ungetc
之后缓冲区是否没有冲洗? 可能会发生什么,当输入是stdin
时它工作正常但是当它是一个文件时它没有? (我对C中的IO并不熟悉)。
编辑:应该使用fscanf
…男孩是我的脸红。
-
当你到达终点或发生错误时,
getc()
将返回EOF,因此请确保检查该错误。 你的c
必须是一个int,而不是能够区分EOF的char。 -
scanf检查其EOF的返回值也是如此。 对于scanf,转换也可能失败,如果成功地将某些内容解析为
n
,则scanf("%i", &n)
应返回1,因此请确保检查该内容。 -
您也在运行,如在
getc(in)
,建议您从特定的FILE *读取,但是您的scanf调用仍然从stdin读取。在那里使用fscanf而不是
scanf
。
scanf()
将从stdin
文件描述符中获取输入。 如果重定向,则将从适当的来源获取。 getc()
将从任何文件描述符中读取。 你正在混合来自文件和标准输入的输入。
您可能对fscanf()
更感兴趣,以便从您的文件中读取。
char c = getc(in); if (c == '(') ... if (c == '%') ... if (isdigit(c)) { int n; ungetc(c, in); fscanf(in, "%i", &n); ... }
在我的情况下,scanf语句下面有一个无限循环,删除无限循环:
unsigned long x,y; scanf("%llu%llu",&x,&y); while(i<=4) { if(list[i]>=x && list[i]<=y) count++; //i++; }