我正在编写以下代码来反转字符串,而不会反转单词。对于例如 I / P:这是sparta O / P:sparta是这个
以下是代码:
#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
char a[50],b[50];
int i,j,k,l;
printf("Enter a string: ");
scanf("%[^\n]s",a);
l=strlen(a);
i=0;j=l-1;
ae:
for(i;;i++)
if(a[i]==' ' || a[i]=='\0')
break;
k=i;
for(j;;j--,k--)
{
if(a[k]==' ' || k==0)
break;
else
b[j]=a[k-1];
}
if(strlen(b)!=l) goto ae;
else
printf("%s",b);
getch();
}
此代码运行时没有错误,但在接受字符串后,它根本没有进一步发展。终端有点被绞死了。我不知道这个问题是什么。请帮忙。
答案 0 :(得分:1)
如果输入的字符串包含空格,则这是一个无限循环。
a
,直到a[i] == ' '
。k = i;
for
循环,因为a[i] == ' '
和k == i
隐含a[k] == ' '
。b
未初始化,但strlen(b) != l
概率很高,因此将采用分支goto ae;
并关闭无限循环。答案 1 :(得分:0)
scanf("%[^\n]s",a);
中的格式字符串由两部分组成:"%[^\n]"
和"s"
。
第一部分需要一系列不同于'\n'
的字符,并将它们写入相应的地址。
第二部分需要文字's'
并丢弃它。
输入“This is sparta \ n”时,scanf()
不会终止。它仍在寻找's'
。
答案 2 :(得分:0)
您无法安全使用strlen(b)
,因为b
中的字符未初始化为0.
首先,将b[50]
更改为b[50] = {0}
。
答案 3 :(得分:0)
我调试了你的程序,我发现的问题是你的程序正在进入一个永无止境的循环。
for(i;;i++)
if(a[i]==' ' || a[i]=='\0')
break;
当a [i]等于&#39;时,上述循环在i = 4时断开。 &#39 ;. 执行goto后,我仍然是4,当时
if(a[i]==' ' || a[i]=='\0')
break;
被评估我仍然是4,因此再次从循环中断开。因此导致无限循环。