我想从输入中读取两个字符串,就像下面的代码。例如,如果用户输入 "steven "作为name[0],那么第二个scanf()将无法工作,结果是name[0]="stev "和name[1]="en"。 我想要的输出是name[0]="stev",name[1]最多是用第二个scanf()读取的4个字符,例如name[1]="gabr",如果输入是gabriel.我试过在第二个scanf()之前用fflush(stdin),也试过用fgets代替scanf,但都没有用。
#include <stdio.h>
int main()
{
char name[2][5];
printf("Enter name1: \n");
scanf("%4s", name[0]);
//fflush(stdin);
printf("Enter name2: \n");
scanf("%4s", name[1]);
for(int i=0 ; i<2 ; i++)
printf("You entered: %s\n", name[i]);
return 0;
}
谁能帮我解决这个问题?
我建议你使用 fgets
而不是 scanf
,就像这样。
fgets( name[0], 5, stdin );
这样一来,你就可以检查一个换行符是否被 fgets
(scanf
不提供这些信息),如果不提供,则消耗剩下的行。
int len = strlen( name[0] );
if ( len > 0 && name[0][len-1] != '\n' )
{
//a newline was not read by fgets, so we must consume the
//rest of the line up to and including the '\n' character
int c;
while ( ( c = fgetc( stdin) ) != EOF && c != '\n' );
}