gpt4 book ai didi

c - 为什么 scanf() 在处理字符串时不接受用户的输入?

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

我的代码如下

typedef struct
{
char name[15];
char country[10];
}place_t;

int main()
{
int d;
char c;
place_t place;
printf("\nEnter the place name : ");
scanf("%s",place.name);
printf("\nEnter the coutry name : ");
scanf("%s",place.country);
printf("\nEnter the type of the place : Metropolitan/Tourist (M/T)?");
scanf("%c",&c);
printf("You entered %c",c);
return 0;
}

如果我运行该程序,它会提示输入地名和国家名称,但从不等待用户输入字符。
我试过了

fflush(stdin);
fflush(stdout);

都不行。

注意:如果我编写类似的代码来获取整数或 float 而不是字符,它会提示输入值并且代码工作正常。

int d;
printf("\nEnter the type of the place : Metropolitan/Tourist (M/T)?");
scanf("%d",&d);

为什么会这样?代码有什么问题吗?

最佳答案

问题是 scanf 在流缓冲区中留下输入的非空白字符后的空白,这是 scanf(%c...) 然后读取的内容.但是等一下...

除了难以正确处理之外,此类使用 scanf 的代码非常不安全。你最好使用 fgets 并稍后解析字符串:

char buf[256];
fgets(buf, sizeof buf, stdin);
// .. now parse buf

fgets 总是从输入中获取整行,包括换行符(假设缓冲区足够大),这样您就可以避免使用 scanf 时遇到的问题.

关于c - 为什么 scanf() 在处理字符串时不接受用户的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8166965/

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