当前位置: 首页 > 知识库问答 >
问题:

为什么这个程序在第一次扫描后进入无限循环?

邹俊豪
2023-03-14

我试图让程序允许用户输入一个数字,然后让计算机告诉用户这个数字是否太小、太大或等于随机生成的数字。提示和输入有效,但在第一次扫描后就卡住了。

我认为这与scanf有关,而不是与条件有关,因为我添加了printf(“测试停止点”),但它不会打印到用户屏幕上。我做错了什么?

#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;
        }
}

共有1个答案

裴彦
2023-03-14

你必须删除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; 
}
 类似资料:
  • 问题内容: 知道为什么信号处理程序进入无限循环吗? 这是代码。请帮我。 问题答案: 的默认操作是终止您的进程。但是,您可以安装处理程序并覆盖此方法: 因此,对于每条触发sigsegv的指令,都会调用此处理程序, 然后重新启动指令 。但是您的处理程序一开始并没有采取任何措施来纠正错误指令的错误。 总之,当指令重新启动时,它将再次出错。一遍又一遍,…你明白了。

  • 我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?

  • 正如使用boto3完全扫描dynamoDb中所解释的,我构建了一个解决方案,使用某些条件完全扫描dynamoDb表。这是我的代码: 但是当代码被执行时,它会进入一个无限循环。这是LastEvaluatedKey每次迭代的输出: 它一直在这两对之间循环。 编辑: 我添加了do_scan方法。

  • 问题内容: 我想做的是请用户输入一些字符串以读入数组,然后要求用户输入该数量的字符串并将其读入数组。当我运行此代码时,它从不要求我在第一个for循环的第一个循环中输入内容,只打印出“字符串#0:字符串#1:”,然后我就可以输入文本了。为什么会这样,我做错了什么? 问题答案: 缓冲。 输入输入数量时,不会在输入缓冲区中占用换行符的位置。在for循环的迭代0中,缓冲区中已经有一行输入,并且可以立即完成

  • 但是如果我在这个循环中打印了一些内容,那么它就不会终止。为什么会这样?

  • 该程序应该使用int 0x10在ASCII中打印一个具有给定字符的金字塔,3行的预期结果(下面代码中使用的数量)将是: A. a a a a a 要编译和运行代码,我使用nasm编译它,然后使用qemu进行仿真: 然而,程序get无法打印所有ASCII值。此外,如果有任何针对nasm代码的调试器,可以让您逐行运行,允许您检查寄存器值,这对学习也很有帮助。