梁山伯与茱莉蔻
2019-12-04 14:27
采纳率: 100%
浏览 648

请问我的代码为什么只有输入没有输出?

题目描述
Sine 的一个朋友疯了,最近他老爱说反话,别人说什么他就倒着说一遍,真是个奇怪的人。那他到底说了什么呢?

(他说的话不超过 1000 个字符。)

输入描述
输入一个正整数 n,表示说话的次数。下面 n 行表示说的话

输出描述
占 n 行,每行表示对应输入的反话

样例输入
2

i am speaking

ACMer

样例输出
gnikaeps ma i

reMCA

#include<stdio.h>
#include<string.h>
int main()
{
    int i,m,n;
    char st1[1000];
    char st2[1000];
   scanf("%d",&m);
    while(m--)
    { 
    gets(st1);
    scanf("%s",st1);
    i = strlen(st1);
    for (n=0;i>= 0; n++) 
    {
        st2[n] = st1[i];
        i--;
    }
    st2[n] = '\0'; 
   for(n=0;n<i;n++)
    printf("%s",st2);
    printf("\n");                       
    } 
    return 0;
 }


  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • qtchen_1988 2019-12-04 15:36
    已采纳
    #include<stdio.h>
    #include<string.h>
    #define N 1000
    int main()
    {
        int i,m,n;
        char st1[N];
        char st2[N];
        memset(st1,0x0,N);
        memset(st1,0x0,N);
        scanf("%d",&m);
        getchar();
        while(m--)
        {
            gets(st1);
            i = strlen(st1);
            for (n=0;i>0;)
                st2[n++] = st1[--i];
            st2[n] = '\0';
            printf("%s\n",st2);
        }
        return 0;
    }
    
    
    打赏 评论
  • 喜欢喝茶的猫 2019-12-04 15:14
    #include "stdio.h"
    #include "stdlib.h"
    
    int main()
    {
        int i,m,n;
        char st1[1000];
        char st2[1000];
        scanf("%d",&m);
        while(m--)
        {
        gets(st1);
        scanf("%s",st1);
        i = strlen(st1);
        i--;
        for (n=0;i>=0; n++)
        {
            st2[n] = st1[i];
            i--;
        }
        st2[n] = '\0';
        //for(n=0;n<i;n++);
        printf("%s\r\n",st2);
        //printf("\n");
        }
        return 0;
     }
    
    打赏 评论
  • @矛盾综合体 2019-12-04 16:36

    首先先简短的发表一下对楼主代码的看法
    很明显的错误,就是输入输出在一个while中,这是一个逻辑错误,如果需要实现
    样例输入
    2
    i am speaking
    ACMer
    样例输出
    gnikaeps ma i
    reMCA
    的话,放在一起肯定是输入一个,输出一个的(当然如果需要修改在一个while中也是可以的,只需要判定为最后一次输入即可,然后全部打印)
    其次再来看看代码的这里 gets(st1);scanf("%s",st1);,what?输入两次吗?其次作为程序规范,建议使用(有兴趣可以自己了解一下)char *fgets(char *s, int size, FILE *stream);
    因为gets存在越界风险。而且基本上用gets会报警告,告诉你不要用(尽管大家都知道警告可以忽略)
    然后是输入流的问题,scanf的输入是无法识别空格的,所以应该用gets或者fgets等
    还有就是需要注意长度和元素起点是不一样的,一个是1,一个是0
    例如:
    123456
    6位于数组第5个,但是这个数组长度是6,这里也需要注意。
    当然还有就是代码规范等问题,不过也没什么
    帮你看了一下,顺便修改了一下实现

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int i,m,n;
        char st1[1000];
        char st2[1000];
        scanf("%d",&m);
        getchar();//去除按下的inter键,清理缓冲
        n=0;
        while(m--)
        { 
            gets(st1);
            i = strlen(st1)-1;//数组元素从0开始,但是长度从1开始
            for(;i>=0;n++,i--) 
            {
                st2[n] = st1[i];
            }
            st2[n] = '\0';
            n++;                    
        } 
        m=i=0;
        while(m!=n)
        {
            m+=strlen(&st2[i])+1;
            printf("%s\n",&st2[i]);
            i=m;
        }
        return 0;
     }
    
    
    

    结果
    运行环境:gcc 编辑软件:sources insight

    图片说明

    如果是实现一个输入一个输出,楼主可以改一下,那个比这个一个更加简单,时间有点紧,注释就没怎么敲了,不接受答疑。

    打赏 评论

相关推荐 更多相似问题