我正在使用gcc-4.7在Centos 6.5上编写以下C代码,但是程序不等待类型Y/N:语句在结果后立即退出.其中任何一个代码都不起作用.
#include <stdio.h>
int main()
{
int a,b;
char ch='y';
do
{
printf("Enter Number 1:\n");
scanf("%d",&a);
printf("Enter Number 2:\n");
scanf("%d",&b);
printf("Result is:%d\n",a+b);
printf("Type y/N:\n");
scanf("%c",&ch);
}while(ch=='y' || ch=='Y');
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
要么
#include<stdio.h>
int main()
{
int a,b;
char ch='y';
while(ch=='y' || ch=='Y')
{
printf("Enter Number 1:\n");
scanf("%d",&a);
printf("Enter Number 2:\n");
scanf("%d",&b);
printf("Result is:%d\n",a+b);
printf("Type y/N:\n");
scanf("%c",&ch);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
执行时:
scanf ("%d", &b);
Run Code Online (Sandbox Code Playgroud)
和输入,例如42<enter>,将42被读取,并且<enter>被保留在输入缓存器.
然后它被拾取,scanf("%c",&ch);这是在尝试读取之前不跳过空格的格式字符串之一.从C99 7.19.6.2 /8C11开始,虽然基本没有变化:
除非规范包含[,c或n说明符,否则将跳过输入空白字符(由isspace函数指定).
许多输入说明符在开始读取实际数据之前往往会跳过空格,这c是例外情况之一.
对于像这样的简单代码,您可能会因为(来自同一部分/5)而在格式字符串中使用空格:
由白色空格字符组成的指令通过读取第一个非空白字符(仍然未读取)的输入来执行,或者直到不再能够读取字符为止.
所以,你会使用类似的东西:
scanf (" %c", &ch);
Run Code Online (Sandbox Code Playgroud)
尽管这不是什么帮助,如果你输入一个数字,如47b例如:-)
在某些时候,每个C开发人员都会意识到标准输入机制的不足之处,并自己编写.