扭转一条线

时间:2016-05-30 10:42:42

标签: c

我试图反转字符串(K& R)但是当我尝试在main中使用printf时它只输出 我尝试在反向功能中使用printf并且它可以工作。它让人感到困惑,为什么打印发生在反向功能但不在主函数中。所有人都帮我这个?

#include<stdio.h>
#define MAXLINE 1000
void reverse(char*);
int getlen(char*,int);
void main()
{
    int i=0;
    char line[MAXLINE];
    printf("\nEnter anything\n");
    while((getlen(line,MAXLINE))>1)
    {
        reverse(line);
    }
   printf("%s",line);//problem here
}
int getlen(char line[],int len)
{
    int c,i=0;
    while((c=getchar())!=EOF && c!='\n' && (i<(len-2)))//last two for \n and \0
    {
        line[i]=c;
        ++i;
    }
    if(c=='\n')
        {
            line[i]=c;
            ++i;
        }

    line[i]='\0';
    return(i);//returns 1 if nothing is written
}
void reverse(char line[])
{
    int i=0,j=0;
    char temp;
    while(line[i]!='\0')
    ++i;
    --i;
    if(line[i]=='\n')
    --i;
    while(j<i)
    {
        temp=line[j];
        line[j]=line[i];
        line[i]=temp;
        ++j;
        --i;

    }

}

1 个答案:

答案 0 :(得分:0)

  

在循环内打印

#include<stdio.h>
#define MAXLINE 1000
void reverse(char*);
int getlen(char*,int);
void main()
{
    int i=0;
    char line[MAXLINE];
    printf("\nEnter anything\n");
    while((getlen(line,MAXLINE))>1)
    {
        printf("%s",line);//problem here
        reverse(line);
        printf("%s",line);//problem here
    }

}
int getlen(char line[],int len)
{
    int c,i=0;
    while((c=getchar())!=EOF && c!='\n' && (i<(len-2)))//last two for \n and \0
    {
        line[i]=c;
        ++i;
    }
    if(c=='\n')
        {
            line[i]=c;
            ++i;
        }

    line[i]='\0';
    return(i);//returns 1 if nothing is written
}
void reverse(char line[])
{
    int i=0,j=0;
    char temp;
    while(line[i]!='\0')
    ++i;
    --i;
    if(line[i]=='\n')
    --i;
    while(j<i)
    {
        temp=line[j];
        line[j]=line[i];
        line[i]=temp;
        ++j;
        --i;

    }

}

<强>测试

$ gcc main.c 
$ ./a.out 

Enter anything
backwards
backwards
sdrawkcab

您也可以尝试online代码通过对代码进行非常小的修改来反转字符串。