[英]scanf not terminating
因此,我有以下代码(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而不是char才能区分EOF。
scanf检查EOF的返回值也是如此。 对于scanf,转换也可能会失败,如果scanf("%i", &n)
成功地将某些内容解析为n
,则应返回1,因此请确保也进行了检查。
您也正在in
进行操作,如getc(in)
,建议您从特定的FILE *中读取,但是您的scanf调用仍从stdin中读取。
在此处使用fscanf而不是scanf
。
在我的情况下,在scanf语句下面的某个地方存在一个无限循环,请删除该无限循环:
unsigned long x,y;
scanf("%llu%llu",&x,&y);
while(i<=4) {
if(list[i]>=x && list[i]<=y)
count++;
//i++;
}
scanf()
将从stdin
文件描述符获取输入。 如果重定向,则将取自适当的来源。 getc()
将从任何文件描述符中读取。 您正在混合来自文件和标准输入的输入。
您可能对fscanf()
感兴趣,可以从文件中读取内容。
char c = getc(in);
if (c == '(')
...
if (c == '%')
...
if (isdigit(c))
{
int n;
ungetc(c, in);
fscanf(in, "%i", &n);
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.