gpt4 book ai didi

c - 编译器在 double 之后跳过 scanf 语句进行字符输入。为什么会这样?

转载 作者:太空宇宙 更新时间:2023-11-04 08:14:59 24 4
gpt4 key购买 nike

#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 调用后标准输入缓冲区中留下了一个换行符。 dflf 等说明符使用并忽略该换行符。当然,说明符 [^\n] 会找到换行符并停止读取,同时在标准输入缓冲区中保留一些输入。

要解决此问题,请在 scanf 格式字符串的开头添加一个空格,这将在尝试读取标准输入之前占用换行符。

scanf(" %[^\n]",string);

关于c - 编译器在 double 之后跳过 scanf 语句进行字符输入。为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36311936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com