首页 > 解决方案 > 从标准输入扫描所有整数。假设每个输入行都是一个整数,空行表示输入结束

问题描述

从标准输入扫描所有整数。假设每个输入行都是一个整数,空行表示输入结束。

我需要从一行中扫描整数,如果输入的输入为空,则中断。尝试了以下代码,但它给出了奇怪的输出。

while (true)
        {
            char ch=getchar();
            printf("%c\n",ch);

            if(ch=='\n')
            {
                break;

            }
            //printf("%d\n",myInt);
            getchar();
        }

请帮忙!谢谢

标签: c

解决方案


我发现您的代码存在许多问题:

  1. 该代码不读取整数。它读取字符并打印它们。但是,它只打印每隔一个字符,因为getchar不使用 second 的返回值。

  2. 没有错误检查。

  3. 的返回类型getcharint- 不是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;
}

几点评论:

上面的代码不是“生产质量”,但我想让示例保持简单。下面描述了一些简短的通讯。

  1. 仅仅调用exit(1)错误可能不是您在实际应用程序中想要的。至少您会先打印一些错误消息,但通常您会在处理用户输入时添加更好的错误处理。

  2. 整数值的计算不检查整数溢出。在您想要添加的真实应用程序中。

  3. 该行if(ch==EOF) exit(1);并不是真正需要的,因为下一个 if 语句将捕获该情况并退出。但是,我添加以显示输入错误和非数字输入之间的区别。


推荐阅读