c - 从标准输入扫描所有整数。假设每个输入行都是一个整数,空行表示输入结束
问题描述
从标准输入扫描所有整数。假设每个输入行都是一个整数,空行表示输入结束。
我需要从一行中扫描整数,如果输入的输入为空,则中断。尝试了以下代码,但它给出了奇怪的输出。
while (true)
{
char ch=getchar();
printf("%c\n",ch);
if(ch=='\n')
{
break;
}
//printf("%d\n",myInt);
getchar();
}
请帮忙!谢谢
解决方案
我发现您的代码存在许多问题:
该代码不读取整数。它读取字符并打印它们。但是,它只打印每隔一个字符,因为
getchar
不使用 second 的返回值。没有错误检查。
的返回类型
getchar
是int
- 不是char
。
有很多方法可以做你想做的事。看来你想要一个解决方案,getchar
所以这样的事情可能是一种方式:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
while (1)
{
int n = 0;
int multiplier = 1;
int ch=getchar();
if(ch=='\n') break; // Empty line - stop reading integers
if(ch=='-')
{
// Handle negative values
multiplier = -1;
ch=getchar();
if(ch=='\n') exit(1); // Error - unexpected newline
}
do
{
if(ch==EOF) exit(1); // Input error
if (ch < '0' || ch > '9') exit(1); // Error - input is not a digit
// "Add" current digit to the integer
n = n * 10;
n = n + ch - '0';
ch=getchar();
} while (ch != '\n');
n = multiplier * n;
printf("%d\n", n);
}
printf ("done\n");
return 0;
}
几点评论:
上面的代码不是“生产质量”,但我想让示例保持简单。下面描述了一些简短的通讯。
仅仅调用
exit(1)
错误可能不是您在实际应用程序中想要的。至少您会先打印一些错误消息,但通常您会在处理用户输入时添加更好的错误处理。整数值的计算不检查整数溢出。在您想要添加的真实应用程序中。
该行
if(ch==EOF) exit(1);
并不是真正需要的,因为下一个 if 语句将捕获该情况并退出。但是,我添加以显示输入错误和非数字输入之间的区别。