我试图在以下程序中找到错误。
如果我输入"这是测试",输出显示"这是A"。我试图找出原因"测试"不见了。
请帮我理解这个问题。提前谢谢。
#include<stdio.h>
#include<string.h>
int main()
{
char str[1000], word[100];
int i, j, length, is_word_started;
gets(str);
length=strlen(str);
is_word_started=0;
for(i=0, j=0; i<length; i++)
{
if(str[i]>='a' && str[i]<='z')
{
if(is_word_started==0)
{
is_word_started=1;
word[j]='A'+str[i]-'a';
j++;
}
else
{
word[j]=str[i];
j++;
}
}
else if(str[i]>='A' && str[i]<='Z' || str[i]>='0' && str[i]<='9')
{
if(is_word_started==0)
{
is_word_started=1;
}
word[j]=str[i];
j++;
}
else
{
if(is_word_started==1)
{
is_word_started=0;
word[j]='\0';
printf("%s\n", word);
j=0;
}
}
}
return 0;
}
答案 0 :(得分:2)
您必须重复
if(is_word_started==1)
{
is_word_started=0;
word[j]='\0';
printf("%s\n", word);
j=0;
}
在for ()
周期之外(在}
的最后)
否则,当您完成对str
的解析后,您在word
中积累的字母将丢失&#34;。
从技术上讲,你可以将它缩短为:
if(is_word_started==1)
{
word[j]='\0';
printf("%s\n", word);
}
因为之后您不会重复使用这些变量。
除了&#34;从不使用gets()
&#34; @usr建议你应该正确地调整word
的大小:总是使用最坏的情况。如果str[1000]
则word[1000]
!