我试图反转字符串(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;
}
}
答案 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代码通过对代码进行非常小的修改来反转字符串。