【问题标题】:Why is this program going into an infinite loop after the first scanf?为什么这个程序在第一次 scanf 之后进入无限循环?
【发布时间】:2021-06-23 19:18:01
【问题描述】:

我试图让程序允许用户输入一个数字,然后让计算机告诉用户该数字是太小、太大还是等于随机生成的数字。提示和输入工作,但第一次scanf后卡住了。

我认为它与 scanf 而不是条件有关,因为我添加了 printf("Testing stop point") 并且它不会打印到用户的屏幕上。我做错了什么?

#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include <stdlib.h>

int main()
{
        //Generate a random number
        int n = 1;
        int count = 0;
        int randomNumber;
        srand(time(NULL));

        for (int i = 1; i <= n; i++)
        {
                randomNumber = rand() % 101;
        }

        printf("Guess a number between 1 - 100: ");

        int input;
        scanf("%d\n",&input);

        printf("Testing stopping point");

        do
        {
            if (input > randomNumber)
            {
                count +=1;
                printf("Too large!Try again: ");
                getchar();
            }else if (input < randomNumber)
            {
                count += 1;
                printf("Too small!Try again: ");
                getchar();
            }
        }while (input != randomNumber);

        if(input == randomNumber)
        {
            count +=1;
            printf("Correct!\n");
            printf("You guessed %d times\n", count);
            return 0;
        }
}

【问题讨论】:

  • 你为什么使用goto?您可以在 do-while 循环中完成这一切。
  • @SuperStormer 谢谢。我删除了它。当我认为我的 do while 循环中的逻辑可能有问题时,我添加了它,但它并没有解决问题
  • 你不会再次scanf,所以输入总是一样的。最后一个 if 也是多余的
  • 不,如果你删除了 goto,你需要重新构建循环
  • @Learning2Code4Life 将scanf 放在do { [...] } while (); 的开头

标签: c stdio


【解决方案1】:

你必须删除scanf中的\n,试试这样:

#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include <stdlib.h>

int main()
{
        //Generate a random number
        
        int count = 0;
        int randomNumber;
        srand(time(NULL));
        randomNumber = (rand() % 101)+1;
        int input=-1;
      
        while (input != randomNumber)
        {
              printf("Guess a number between 1 - 100: ");
             scanf("%d",&input);
            if (input > randomNumber)
            {
                count +=1;
                printf("Too large!Try again: ");
                
            }else if (input < randomNumber)
            {
                count += 1;
                printf("Too small!Try again: ");
               
            }
         
        }
if(input == randomNumber)
        {
            count +=1;
            printf("Correct!\n");
            printf("You guessed %d times\n", count);
           
        }

       return 0; 
}

【讨论】:

  • 感谢您的帮助!原来问题是我在 %d 之后放了一个 \n。
猜你喜欢
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2017-11-08
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多