【发布时间】:2017-06-22 21:14:58
【问题描述】:
我正在编写一个从键盘读取未定义数量的整数的 C 程序。无限。该程序有一个循环,它使用 scanf 读取整数并存储要显示的最低和最高值。如果用户输入负数或非整数,则循环结束并显示信息(最小值和最大值)。
注意:我不想使用“ISDIGIT”或“FGET”等内置函数。不知道他们是什么,我不想“作弊”。
我发现我的 EOF 值为 -1。我尝试将“while(scanf("%d", &num) > -1)" 放入我的循环中。如果您输入一个字符(继续阅读并且永不结束循环),这将不起作用。如果您输入诸如“--2”之类的双重否定,它有时会中断循环。无论如何,它不起作用。
我的问题在于我的程序将我的当前代码 的行为混淆了。有时它不会保持或读取零。有时它只存储和显示第二高的值。有时在我输入字符或符号以触发循环结束后,它会显示倒数第二个最高或最低值。其他时候它工作得很好。如果最小值不等于 1 且小于 1,我尝试了一些更合乎逻辑的语句来强制最小值为零,但这也不起作用。
一个奇怪行为的例子......
输入一些整数值,EOF退出...
0
1
2
3
4
e
不是整数
最小值为0
最大值为3
谁能解释为什么会发生这种情况并提供解决方案和/或提示?我已经搜索了几个小时了。
谢谢!
这是我的代码...
int min;
int max;
int num;
printf(" Enter some integer values, EOF to quit...\n");
scanf("%d\n", &num);
min = max = num;
while(scanf("%d", &num) == 1)
{
if(num > max)
{
max = num;
}
else if(num < min)
{
min = num;
}
scanf("%d\n", &num);
}//while(scanf("%d", &num) == 1);
printf(" not an int \n");
printf(" The minimum value is %d\n", min);
printf(" and the maximum value is %d\n", max);
【问题讨论】:
-
您为每个循环调用了
scanf两次。这真的是你想要的吗? -
当您输入不能为整数的内容时,
scanf()返回 0,而不是 EOF。 -
"...来自键盘的未定义数量的整数。没有限制。"它是哪一个:未定义或无限?这两个术语在技术上是正交的;您不能将 undefined define 定义为 unlimited。
-
另外,你真的应该做更多的研究。这是一个常见的问题,并且已经有了答案! :(
-
也许你应该阅读 scanf 的文档。这不是作弊