新人,,,帮我看错在哪里?

时间:2021-09-05 00:08:51
//功能:输入字符串,按y键开始输入,输入五组字符串后判断是否继续输入,按y键继续输入。按n键结束输入。//
#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
while(getchar()!='\0');
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
while(getchar()!='\0');
        printf("是否继续输入(y/n)");
             b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

19 个解决方案

#1


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();

    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);

        printf("是否继续输入(y/n)");
             b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#2


输入五组字符串后判断是否继续输入,按y键继续输入

一直输入 y
那么就没有结束了
定义长度是5的数组根本不够

#3


1楼是错的~`
输入y后提示输入字符.可是输入字符后不再提示是否再输入y/n

#4


while 的判断改下

#5


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
while(getchar()!='\0');
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
while(getchar()!='\0');
        printf("是否继续输入(y/n)");
             b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}


谁帮我改一下.

#6


一直输入Y也不是不行,5个就够了,就是后来输入的把以前的给覆盖了。不知道楼主是什么意思?想干什么?

#7


第9行和18行的 while(getchar()!='\0');很没道理。如果不输入EOF就阻塞,这真的是你所要的吗?
在这点上1楼是正解的!!
第二个问题在于你使用的gets()。你在调用getchar()后,输入y并回车,这个回车也是一个字符,并且被保存在缓冲里面,当for循环时,第一个循环中的gets()会从缓冲中把这个回车读出来,保存在a[0]中。也就是第一个gets()得到的是一个不想要的回车符。

另外,建议不要使用gets(),这个函数很不安全。scanf是很好的选择。

#8


新人,,,帮我看错在哪里?   

???要新人看?
我不是新人了,就不凑热闹了

#9


那大家帮我改改啊..

#10


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
// while(getchar()!='\0');        //死循环
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            scanf("%s",a[i]);
// while(getchar()!='\0');        //死循环
        printf("是否继续输入(y/n)");
getchar();
       b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}
把那两个while去去掉就行了
不过不知道怎么搞的
        printf("是否继续输入(y/n)");
getchar();
       b=getchar();
这里不加getchar()不行。。。。

#11


楼上的明显没认真看我的“大作”,你看一下第7楼我的说明就恍然大悟了

#12


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
while(getchar()!='\0');
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
while(getchar()!='\0');
        printf("是否继续输入(y/n)");
             b=getchar();
             getchar();-------->不知道楼主这个程序的意图是什么,但这个程序要正常运行,这儿必须的加上!用来接受上一个getchar()遗留的换行符!
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#13


我再来说清楚一点
在调用b = getchar()的时候,输入了一个字符,并加上一个回车。这个字符被getchar()获得了并付值给了b,但是getchar()只能获得一个字符,也就是说这个回车符还留在缓冲区里面没有被提取。在后面调用scanf()的时候,scanf()是以回车符作为输入结束标识的,因此第一个scanf()从缓冲区中把上次留下的回车符提取出来,正好满足结束输入的条件,于是scanf()就成功返回了,把回车符拷贝到给a[0]的内存空间中

#14


最好不要用getchar,直接用cin就可以了

#15


还有,尽量少用低级的数组,用vector要方便得多

#16


//功能:输入字符串,按y键开始输入,输入五组字符串后判断是否继续输入,按y键继续输入。按n键结束输入。//  ==>这个功能好像在你的程序里没有体现出来哦,每输入一整组数据都把原来的数据给 覆盖了,不知道楼主的用意是什么.可以这样改程序,使得它输出最后输入的那组数据,以前输入的都被覆盖掉了,呵呵

#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
// while(getchar()!='\0');==>想干嘛呀?呵呵
    while(b=='y')
    {    
    
        char temp;
        scanf("%c",&temp);//过滤掉回车
        
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
//while(getchar()!='\0');//这一句也可以免了吧
        printf("是否继续输入(y/n)");
             b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#17


都是 gets()惹得祸 换scanf 就好了 哪位兄弟能 讲解一下缓冲阿


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    scanf("%c",&b);
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);

        printf("是否继续输入(y/n)");
             scanf("%c",&b);
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#18


人家楼主那两个while(getchar.....是用来去掉回车符的,不能去掉了,只不过错在判断的字符不对,不应该用'\0'判断,要用'\n'判断。还有第二个while(getchar....要改放在b=getchar()后面,修改后的代码如下:

#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
while(getchar()!='\n');
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
        printf("是否继续输入(y/n)");
             b=getchar();
       while(getchar()!='\n'); 
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#19


字符串我也没有学好,好多函数也不能自己来实现

#1


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();

    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);

        printf("是否继续输入(y/n)");
             b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#2


输入五组字符串后判断是否继续输入,按y键继续输入

一直输入 y
那么就没有结束了
定义长度是5的数组根本不够

#3


1楼是错的~`
输入y后提示输入字符.可是输入字符后不再提示是否再输入y/n

#4


while 的判断改下

#5


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
while(getchar()!='\0');
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
while(getchar()!='\0');
        printf("是否继续输入(y/n)");
             b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}


谁帮我改一下.

#6


一直输入Y也不是不行,5个就够了,就是后来输入的把以前的给覆盖了。不知道楼主是什么意思?想干什么?

#7


第9行和18行的 while(getchar()!='\0');很没道理。如果不输入EOF就阻塞,这真的是你所要的吗?
在这点上1楼是正解的!!
第二个问题在于你使用的gets()。你在调用getchar()后,输入y并回车,这个回车也是一个字符,并且被保存在缓冲里面,当for循环时,第一个循环中的gets()会从缓冲中把这个回车读出来,保存在a[0]中。也就是第一个gets()得到的是一个不想要的回车符。

另外,建议不要使用gets(),这个函数很不安全。scanf是很好的选择。

#8


新人,,,帮我看错在哪里?   

???要新人看?
我不是新人了,就不凑热闹了

#9


那大家帮我改改啊..

#10


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
// while(getchar()!='\0');        //死循环
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            scanf("%s",a[i]);
// while(getchar()!='\0');        //死循环
        printf("是否继续输入(y/n)");
getchar();
       b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}
把那两个while去去掉就行了
不过不知道怎么搞的
        printf("是否继续输入(y/n)");
getchar();
       b=getchar();
这里不加getchar()不行。。。。

#11


楼上的明显没认真看我的“大作”,你看一下第7楼我的说明就恍然大悟了

#12


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
while(getchar()!='\0');
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
while(getchar()!='\0');
        printf("是否继续输入(y/n)");
             b=getchar();
             getchar();-------->不知道楼主这个程序的意图是什么,但这个程序要正常运行,这儿必须的加上!用来接受上一个getchar()遗留的换行符!
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#13


我再来说清楚一点
在调用b = getchar()的时候,输入了一个字符,并加上一个回车。这个字符被getchar()获得了并付值给了b,但是getchar()只能获得一个字符,也就是说这个回车符还留在缓冲区里面没有被提取。在后面调用scanf()的时候,scanf()是以回车符作为输入结束标识的,因此第一个scanf()从缓冲区中把上次留下的回车符提取出来,正好满足结束输入的条件,于是scanf()就成功返回了,把回车符拷贝到给a[0]的内存空间中

#14


最好不要用getchar,直接用cin就可以了

#15


还有,尽量少用低级的数组,用vector要方便得多

#16


//功能:输入字符串,按y键开始输入,输入五组字符串后判断是否继续输入,按y键继续输入。按n键结束输入。//  ==>这个功能好像在你的程序里没有体现出来哦,每输入一整组数据都把原来的数据给 覆盖了,不知道楼主的用意是什么.可以这样改程序,使得它输出最后输入的那组数据,以前输入的都被覆盖掉了,呵呵

#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
// while(getchar()!='\0');==>想干嘛呀?呵呵
    while(b=='y')
    {    
    
        char temp;
        scanf("%c",&temp);//过滤掉回车
        
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
//while(getchar()!='\0');//这一句也可以免了吧
        printf("是否继续输入(y/n)");
             b=getchar();
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#17


都是 gets()惹得祸 换scanf 就好了 哪位兄弟能 讲解一下缓冲阿


#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    scanf("%c",&b);
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);

        printf("是否继续输入(y/n)");
             scanf("%c",&b);
    
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#18


人家楼主那两个while(getchar.....是用来去掉回车符的,不能去掉了,只不过错在判断的字符不对,不应该用'\0'判断,要用'\n'判断。还有第二个while(getchar....要改放在b=getchar()后面,修改后的代码如下:

#include<stdio.h>
void main()
{
    int i;
    char a[5][100],b;
    printf("是否开始输入(y/n)");

    b=getchar();
while(getchar()!='\n');
    while(b=='y')
    {    
    
    
        printf("请输入5组字符串:\n");
        for(i=0;i<5;i++)
            gets(a[i]);
        printf("是否继续输入(y/n)");
             b=getchar();
       while(getchar()!='\n'); 
    }
     
     for(i=0;i<5;i++)
         printf("%s\n",a[i]);
}

#19


字符串我也没有学好,好多函数也不能自己来实现

#20