如何在 c 中处理长度较长的字符串的行中输入 2 个特定大小的字符串?
How to input 2 strings with specific size in a row handling strings with longer length in c?
我想像下面的代码一样从输入中读取两个字符串。问题是当用户输入一个较长的字符串时会导致溢出。例如,如果用户输入 "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,但其中 none 有帮助。
#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' );
}
我想像下面的代码一样从输入中读取两个字符串。问题是当用户输入一个较长的字符串时会导致溢出。例如,如果用户输入 "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,但其中 none 有帮助。
#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' );
}