在while循环中不要求第二个输入

时间:2017-01-04 08:19:03

标签: c

FIELD

执行此程序后,它没有要求第二个scanf函数,所以它在第三个printf语句printf之后终止("你想......"); 帮我纠正它!

3 个答案:

答案 0 :(得分:3)

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

您可以使用" %c" 代替"%c"来格式化字符串来拯救它。空白导致scanf()在读取字符

之前跳过空格(包括换行符)

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

答案 1 :(得分:1)

将第一个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: 

答案 2 :(得分:0)

我稍微修改了你的代码:

#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 只会读取整数,因此有一个text / char会取消该程序。希望它有所帮助!

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