Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言读取和打印字符串_C_String_Gets_Puts - Fatal编程技术网

用C语言读取和打印字符串

用C语言读取和打印字符串,c,string,gets,puts,C,String,Gets,Puts,我想在循环中一个接一个地扫描和打印两个字符串。但我不能这样做。如果我使用循环,则只能扫描和打印一个字符串。如果我尝试在没有循环的情况下打印,则两个“get()”可以正常工作 #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); //

我想在循环中一个接一个地扫描和打印两个字符串。但我不能这样做。如果我使用循环,则只能扫描和打印一个字符串。如果我尝试在没有循环的情况下打印,则两个“get()”可以正常工作

#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);
}
}
#包括
int main()
{
int T,i,j;
字符名称1[100];
字符名称2[100];
scanf(“%d”、&T);

对于(i=0;i在这里。使用
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;
}
#包括
int main()
{
int T,i,j;
字符名称1[100];
字符名称2[100];
scanf(“%d”、&T);

对于(i=0;i您不终止打印。 标准输出被缓冲。 仅在“\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
    }
}
#包括
int main()
{
int T,i,j;
字符名称1[100];
字符名称2[100];
scanf(“%d”、&T);

对于(i=0;i从用户获取testcase后,下一行
get()
函数将获取
'\n'
,您必须忽略该场景

这个问题有一个棘手的解决方案。只需在scanf函数中的
%d
之后使用
'\n'
scanf(“%d\n”,&T);

#包括
内部主(空){
字符s1[100],s2[100];
int i,T;
scanf(“%d\n”、&T);
对于(i=0;i
请举一个输入输出示例!第一次扫描或获取()-读取qwerty YTRUQ打印qwerty YTRUQ第二次扫描或获取()-读取asd dsa打印asd dsa我希望此输出
一个接一个地获取
然后依次放入
。请参阅
scanf()
对于一个数字,在输入流中留下一个换行符,第一个
获取()
读取该换行符。建议尽可能不要使用
获取
。并非每个人都知道
获取
是一个事实。有关使用
fflush(stdin)的(de)优点的讨论,请参阅
。那么我通常应该如何复制和粘贴字符串@Jonhware@saqibshafin请参阅注释中的链接。此处发布的链接通常会解释错误的原因以及如何纠正错误。@saqibshafin任何可以限制复制字符数的字符串复制例程通常比unc安全得多hecked例程,例如
获取
。缓冲区溢出非常严重
#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;
}