【问题标题】:Does not ask for 2nd input in do while loop [duplicate]在 do while 循环中不要求第二个输入[重复]
【发布时间】:2017-01-04 08:19:03
【问题描述】:
#include<stdio.h>
void main()
{
 char letter;
 int num;
 do
 {
   printf("Enter any number: ");
   scanf("%d",&num);
   printf("Square of %d is %d\n",num,num*num);
   printf("you want to enter another no y/n ");
   scanf("%c",&letter);
 }while(letter=='y');
}

执行此程序后,它没有请求第二个 scanf 函数,因此它在第三个 printf 语句后终止 printf("you want to.."); 帮我改正!

【问题讨论】:

  • scanf("%c",&amp;letter); 应该是scanf(" %c",&amp;letter);(注意%c 前面有一个空格),但是为什么呢?
  • 为什么要在%c前加一个空格?
  • 这是因为我们敲回车时有多余的空间吗?
  • 谢谢我在 %c 之前给了一个空格,它起作用了!

标签: c


【解决方案1】:

基本问题是 scanf() 在缓冲区中的数字之后留下换行符,然后在下一次传递时使用 %c 读取它。

您可以通过使用" %c" 而不是"%c"作为格式字符串来拯救它。空白会导致 scanf() 在读取字符之前跳过空格(包括换行符)

或者你可以使用 getchar() 函数

【讨论】:

  • Given the information in this question,这里的答案似乎是从 Jonathan Leffler 的答案中复制的,该答案于 2012 年 3 月 5 日 7:05 制作。但是找不到原文,不知是否被删除了。
【解决方案2】:

要么将第一个 scanf 更改为

scanf("%d\n", &num);

或者把第二个scanf改成

scanf(" %c", &letter);

忽略换行符。

另一种选择(将读取直到输入有效整数)

#include <stdio.h>

int main() {
    int n;
    while(1) {
        printf("Enter any number: ");
        if (scanf("%d", &n) != 1)
            break;
        printf("Square of %d is %d\n", n, n * n);
    }
}

输入

2
3
5

输出

Enter any number: 2
Square of 2 is 4
Enter any number: 3
Square of 3 is 9
Enter any number: 4
Square of 4 is 16
Enter any number: 

【讨论】:

    【解决方案3】:

    我稍微修改了你的代码:

    #include<stdio.h>
        #inlcude <conio.h>
        void main()
        {
         char letter;
         int num;
        clrscr();
         do
         {
           printf("Enter any number: ");
           scanf(" %d",&num);
           printf("Square of %d is %d\n",num,num*num);
           printf(" you want to enter another number? y/n");
           scanf(" %c",&letter);
         }while(letter=='y');
    }
    

    我只是在你的 scanf 上添加了空格以在 scanf 读取整数之前消除空格。 %d 只会读取整数,因此那里有一个文本/字符会取消程序。希望有帮助!

    编辑:我忘了告诉你,我为 clrscr(); 添加了另一个#include,以便在你重新运行程序时清除屏幕。

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      相关资源
      最近更新 更多