如何在 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' );
}