0

我想在一个循环中一个接一个地扫描和打印两个字符串。但我做不到。如果我使用循环,只有一个字符串被扫描和打印。如果我尝试在没有循环的情况下打印,那么两个“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);
}
}
4

3 回答 3

1

干得好。使用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() 。

于 2015-06-13T13:50:27.593 回答
1

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

这是这个问题的一个棘手的解决方案。只需在 scanf 函数中使用'\n'after 。%dscanf("%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;
}
于 2016-02-11T10:05:25.077 回答
0

您不会终止打印。标准输出被缓冲。仅在“\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
    }
}
于 2015-06-13T14:12:19.413 回答