C代码不';不工作,但没有错误
我正在编写以下代码来反转字符串,而不反转单词。例如。 我是斯巴达 这是斯巴达吗 代码如下:C代码不';不工作,但没有错误,c,string,logic,C,String,Logic,我正在编写以下代码来反转字符串,而不反转单词。例如。 我是斯巴达 这是斯巴达吗 代码如下: #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);
#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();
}
#包括
#包括
#包括
void main()
{
字符a[50],b[50];
int i,j,k,l;
printf(“输入字符串:”);
scanf(“%[^\n]s”,a);
l=斯特伦(a);
i=0;j=l-1;
ae:
对于(i;;i++)
如果(a[i]=''|a[i]='\0')
打破
k=i;
对于(j;;j--,k--)
{
如果(a[k]=''|k==0)
打破
其他的
b[j]=a[k-1];
}
如果(strlen(b)!=l)转到ae;
其他的
printf(“%s”,b);
getch();
}
这段代码运行时没有错误,但在接受字符串后,它就不会再进一步了。航站楼有点被吊死了。我不知道有什么问题。请帮助。scanf中的格式字符串(“%[^\n]s”,a)代码>由两部分组成:
“%[^\n]”
和“s”
第一部分需要一个不同于'\n'
的字符序列,并将它们写入相应的地址
第二部分需要一个文本's'
,并丢弃它
输入“This is sparta\n”时,
scanf()
不会终止。它仍在寻找一个's'您不能安全地使用strlen(b)
,因为b
中的字符未初始化为0
首先,将b[50]
更改为b[50]={0}
如果输入的字符串包含空格,则这是一个无限循环
迭代字符串a
,直到a[i]=''
k=i代码>
立即中断第二个for
循环,因为a[i]='
和k==i
意味着a[k]='
b
未初始化,但strlen(b)!=l
极有可能为真,因此分支转到ae代码>,无限循环闭合
我调试了你的程序,发现问题是你的程序进入了一个永无止境的循环
for(i;;i++)
if(a[i]==' ' || a[i]=='\0')
break;
当[i]等于“”时,上述循环在i=4处中断。
后来后藤被执行后,我还是4岁,什么时候
if(a[i]==' ' || a[i]=='\0')
break;
被计算的i仍然是4,因此再次从循环中断。从而导致一个无休止的循环。为什么要使用%[^\n]s
读取?您有两个for
循环,其中任何一个循环都没有停止条件,您希望读取字符串是什么。我甚至用过gets()。但同样的问题是循环内部的ecounteredIt中断,这就是为什么@barakmanosa[i]='
no change codition,当a[i]:''时,s
不代表string
而不是字面's'
??好的,“%[^\n]s”
只是与表达式[^\n]
匹配的一部分字符串。我可能错了。@ArjunSreedharan:你错了<代码>“%s”
代表字符串“%[…]”
代表扫描集“%[…]s”
表示扫描集,后跟文字's'
。请看,我尝试删除scanf并尝试使用get函数。这个问题仍然存在。只要找到换行符,scanf()调用就会终止。它不查找s
。它很可能是scanf(“%[^\n]你好,早上好,来自英国”,a)代码>。如果(scanf(“%49[^\n]”,a)!=1)/*错误*,我将使用代码>以防止缓冲区溢出并检测输入数据中的错误。