在 C 中读取和打印字符串

Reading and printing strings in C

我想在 loop.But 中一个接一个地扫描并打印两个字符串 我做不到 it.Only 如果我使用 loop.If 我尝试打印一个字符串没有循环那么两个 "gets()" 工作正常。

#include <stdio.h>

int main()
{
int T,i,j;
char name1[100];
char name2[100];
scanf("%d",&T);
for(i=0; i<T; i++)
{
    printf("Case %d: ",i+1);
    //scanf("%[^\n]s",name1);        
    gets(name1);
    /*for(j=0; j<strlen(name1); j++)
    {
        printf("%c",name1[j]);
    }*/
    puts(name1);
    //scanf("%[^\n]s",name2);
    gets(name2);
    /*for(j=0; j<strlen(name2); j++)
    {
        printf("%c",name2[j]);
    }*/
    puts(name2);
}
}

给你。使用 fflush(stdin)。它将接受两个输入并一个接一个地打印它们。

#include<stdio.h>

int main()
{
int T,i,j;
char name1[100];
char name2[100];
scanf("%d",&T);
for(i=0; i<T; i++)
{
    printf("Case %d: ",i+1);
    fflush(stdin);
    gets(name1);

    gets(name2);

    puts(name1);

    puts(name2);
}
return 0;
}

编辑:正如下面评论中所建议的,如果您不知道要读取的字符数,则不建议使用 gets()。

您不会终止打印。 标准输出被缓冲。 打印仅在“\n”或显式刷新后执行。 尝试绕行:

#include <stdio.h>

int main()
{
    int T,i,j;
    char name1[100];
    char name2[100];
    scanf("%d",&T);
    for(i=0; i<T; i++)
    {
#ifdef BAD_CODE
        printf("Case %d: ",i+1);
        gets(name1);
        puts(name1);
        gets(name2);
        puts(name2);
        putchar("\n");
#else //better code
        fgets(name1, sizeof(name1)-1, stdin);
        fgets(name2, sizeof(name2)-1, stdin);
        printf("Case %d: '%s' '%s'\n",i+1, name1, name2);
#endif
    }
}

从用户处获取测试用例后,下一行 gets() 函数将获取 '\n' 你必须忽略的场景。

Here's a tricky solution of this problem. Just use '\n' after %d in scanf function. scanf("%d\n",&T);

#include <stdio.h>

int main(void) {
    char s1[100],s2[100];
    int i,T;
    scanf("%d\n",&T);
    for(i = 0; i < T; i++){
        printf("Case %d: ",i+1);
        gets(s1);
        puts(s1);
        gets(s2);
        puts(s2);
    }
    return 0;
}