考虑以下代码:
#include <stdio.h>
int main (void)
{
char str1[128], str2[128], str3[128];
printf ("\nEnter str1: ");
scanf ("%[^\n]", str1);
printf ("\nstr1 = %s", str1);
printf ("\nEnter str2: ");
scanf ("%[^\n]", str2);
printf ("\nstr2 = %s", str2);
printf ("\nEnter str3: ");
scanf ("%[^\n]", str3);
printf ("\nstr3 = %s", str3);
printf ("\n");
return 0;
}
当程序执行时,只有第一个scanf
会停下等待用户输入。程序不会为后面的scanf
停下来等待用户输入。但是,如果将格式字符串从"%[^\n]"
更改为" %[^\n]"
(注意%
前面的空格),那么它就可以正常工作了。是否自动接受了先前输入缓冲区中的某个现有换行符?但清除stdin
并不能解决这个问题。
这是什么原因。
fgets
,您的生活将变得更加轻松。我通常建议在大多数情况下避免使用scanf
,但特别是在这种情况下,您正在为一个非常简单的任务使用一个非常强大且难以使用的函数。 - Chris Lutz