gpt4 book ai didi

c - 为什么 scanf 无法正确读取输入?

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

我不知道怎么了。我是否以错误的方式使用格式说明符?有人请帮助我是编码的新手。

#include <stdio.h>
#include <stdlib.h>

int main()
{
char name[20];int age;char grade;double gpa;char area[10];
printf("User Input\n");
printf("Enter your name: ");
fgets(name,20,stdin);
printf("Your name is %s\n",name);
printf("Enter your age: ");
scanf("%d\n",&age);
printf("Your age is %d\n",age);
printf("Enter you grade: ");
scanf("%c\n",&grade);
printf("Your grade is %c\n",grade);//Why is this giving an int output?
printf("Enter your gpa: ");
scanf("%f\n",&gpa);
printf("Your gpa is %f\n",gpa);
printf("Enter your area: ");
scanf("%s\n",&area);
printf("Your area is %s",area);//This shows grade input
return 0;
}

输出

最佳答案

您在阅读name 时正确使用了fgets。我建议还对所有其他输入使用 fgets,然后从中解析出预期值。例如:

char age_str[20];
fgets(age_str, 20, stdin);
age = strtol(age_str, NULL, 10);

这比直接对非字符串输入使用 scanf 更可取,因为如果输入无法匹配格式字符串,它将保留在 stdin 中并搞砸另一个 scanf 调用。

如果您想正确使用scanf:

  • 检查其返回值是否与字符串中格式说明符的数量相匹配。如果不是,则某些输入未成功读取。您可能需要为此使用 do/while 循环。
  • 格式字符串以空格开头,如 "%c" 中那样,这样 stdin 中剩余的任何空格都将被跳过。
  • Don't end your format strings with a newline .

关于c - 为什么 scanf 无法正确读取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829416/

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