【问题标题】:Using a while loop to iterate through user input until specific number使用 while 循环遍历用户输入直到特定数字
【发布时间】:2015-07-22 05:48:11
【问题描述】:

我正在尝试在新行上打印出每个整数,给定由空格分隔的整数与用户输入。它在特定数字后停止打印,比如 84。例如

用户输入是

20 -4 84 8

如何使用 while 循环将这些打印出来

20
-4
84

我知道 scanf("%d %d %d %d", a, b, c, d),但是输入的大小是未知的,因此可能只有 3 个数字或 7 个数字。到目前为止,我有:

#include <stdio.h>

int main(void)
{
    int i = 0;
    int x = 0;
    scanf("%d", &x);
    while (x != 84) {
        print("%d\n", x[i]);
        i++;
    }
}

【问题讨论】:

  • 什么是num?你想存储以前的数字吗?
  • 抱歉编辑问题。它是用户输入的“x”。不是不想存储以前的数字,只需要打印它们

标签: c


【解决方案1】:

scanf 推入while 条件。类似的东西

while (scanf("%d", &x) != EOF && x != 84)
    print("%d\n", x);

【讨论】:

  • +1 用于检查 scanf 的返回值,以避免当用户输入 "%d" 不会扫描的内容时出现 inf-loop。
  • 谢谢,这正是我所需要的。你能向我解释一下,与我所做的相比,将 scanf 放在 while 条件下是如何工作的吗?我是 C 新手,谢谢
  • @Jack8246 您扫描了一次输入并一次又一次地与84 进行比较,直到找到84。这就是区别。这还会检查 scanf 是否正确读取了它所要求的内容,int 此处。
  • @Shreevardhan 我明白了,所以通过将 scanf 放入 while 循环,while 循环是否会自动遍历用户输入的每个整数?这是我不确定的主要事情,因此为什么我在以前的代码中有'i++'
  • @Jack8246 是的。 scanf("%d", &amp;x); 扫描 x 中的整数。将它放在循环条件中将在每次循环迭代中执行它,直到循环中断。因此,它会扫描整数,直到找到84。您可以阅读一本关于 C 编程的好书以获得更好的想法。
【解决方案2】:

基本概念应该分为两步:

  1. 读取号码
  2. 检查并决定是否打印/继续。

伪代码看起来像

while ((ret =scanf(x)) && ret != EOF ){
     if (x == VAL) break;
     printf(x);
 }

【讨论】:

    【解决方案3】:

    你有几个错误:

    • 数组num不存在;
    • scanf 必须在 while 循环内重复。

    修正后的代码如下:

    #include <stdio.h>
    
    int main(void)
    {
        int x;
        while( 1 ){
            scanf( "%d", &x );
            print( "%d\n", x );
            if( x==84 ) break;
        }
    }
    

    【讨论】:

    • 数组 num 应该是 'x',抱歉。感谢您的回答
    • 这个答案几乎是对的;但是,OP 表示要打印 84。所以'if()' 语句和 printf() 语句需要交换。顺便说一句:它是 'printf' 而不是 'print' 并且还需要检查返回的值(不是参数值),所以类似于用户输入的不是数字的东西,比如简单的换行符和/或 a...z等可以被捕获,当返回值不是1时,需要调用getchar()而不是调用printf(),如果返回值为EOF,则需要退出循环
    【解决方案4】:

    您需要将scanf() 放入while 循环中以更新每个新输入。如果您只想打印输入的值,则不需要数组,因为您可以在新输入后打印它。最好使用do-while 循环。

    #include <stdio.h>
    
    int main(void)
    {
        int i = 0;
        int x = 0;
    
        do {
            if ( scanf("%d", &x) < 0 )
                break;
            printf("%d\n", x);
        } while (x != 84);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 2011-12-28
      • 1970-01-01
      • 2014-06-28
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      相关资源
      最近更新 更多