SCANF 可能没有读取正确的值

SCANF probably not reading the correct value

如果您在“名称”字段中输入超过五个字符,该函数会给出错误的输出,否则如果输入少于或等于五个字符,该函数就可以正常工作,或者如果我只使用 %s 而不是使用 %5s 读取五个字符,那么该函数也可以工作。

是否有可用的修复程序(我想使用 %5s)?

#include<stdio.h>

int main(void)
{
  char name[6];
  int age;
  printf("Enter your name: ");
  scanf("%5s",name);
  printf("Enter your age: ");
  scanf("%d",&age);
  printf("Your name: %.4s\n",name);
  printf("Your age: %d\n",age);
  return 0;
}

最好将输入限制为五个字符,因为这将使其完全适合您的数组(包括终止符)。但是,如果用户输入更长的字符串,剩余的将留在缓冲区中,age 的输入将不起作用。

作为改进输入的(相对)简单的方法,使用 fgets 代替读取一行但增加数组大小,因为它可以包含换行符本身。这就是这里的要点:如果缓冲区包含换行符,那么您就知道您已经阅读了完整的字符串,可以用字符串终止符替换它,然后继续。但是,如果缓冲区不包含换行符,则需要通过读取该行的所有剩余字符并忽略它们来“刷新”输入缓冲区。