#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int intvar=0; //variable to store integer input
double decimalvar = 0; //variable to store double input
char string[30]; //arrary to store string
scanf("%d",&intvar); //scan for int input
scanf("%f",&decimalvar); //scan for double input
scanf("%[^\n]",string); //scan for a line input
printf("%d\n",intvar); //print int var
printf("%.1f\n",decimalvar);//print double var
printf("%s",string);//print string
return 0;
}
程序运行成功,但只需要两个输入。输入第二个输入后,跳过第三个scanf语句,执行printf语句。为什么会这样?
最佳答案
scanf("%f",&decimalvar);
应该是:
scanf("%lf",&decimalvar);
因为您传递的是 double
而不是 float
。
这在技术上是未定义的行为,但不是您问题的原因,即在 scanf 调用后标准输入缓冲区中留下了一个换行符。 d
、f
、lf
等说明符使用并忽略该换行符。当然,说明符 [^\n] 会找到换行符并停止读取,同时在标准输入缓冲区中保留一些输入。
要解决此问题,请在 scanf 格式字符串的开头添加一个空格,这将在尝试读取标准输入之前占用换行符。
scanf(" %[^\n]",string);
关于c - 编译器在 double 之后跳过 scanf 语句进行字符输入。为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36311936/