scanf函数不会终止
问题描述:
所以,我有下面的代码(C):scanf函数不会终止
char c = getc(in);
if (c == '(')
...
if (c == '%')
...
if (isdigit(c))
{
int n;
ungetc(c, in);
scanf("%i", &n);
...
}
一切都很好,当我在输入正在阅读从标准输入,但在输入从一个读取时花花公子文件,呼叫scanf
不会终止。
我在呼叫前添加了一些代码,以便在致电scanf
之前查看发生了什么。其中一个例子是后
c = '0'
- 右侧的字符
c
是)
是ungetc
或东西后不冲水缓冲区?可能会发生什么,当输入是stdin
但它不是文件时它可以正常工作? (我不熟悉C中的IO)。
编辑:应该使用fscanf
......男孩是我的脸红。
答
getc()
将返回EOF当你01到达终点或发生错误,所以 确保您检查。你的c
必须是一个整数,而不是一个字符能够区分EOF。这同样适用于scanf检查其 EOF的返回值。对于scanf 转换也可能失败,
scanf("%i", &n)
应返回1如果 它成功地分析 到n
因此请确保您也检查 太1。-
你也在
getc(in)
操作上in
,如 ,提示你 从一个特定的文件*阅读,但是 您scanf函数调用仍然读取从标准输入 。在那里使用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++;
}
存储getc'的'结果在'char'变量始终是错误的。 'getc'返回'int'。不过,这与你的问题是分开的。 – 2010-09-06 23:32:20
感谢您的提示。 – Pete 2010-09-06 23:36:59