我想得到最长单词的字母数。如果我输入像#34; hello me"我得到5但是如果我写的更长的东西像"传说联盟"我得到6而不是7.为什么?
#include <stdio.h>
int longest_word(const char string[]){
int i;
int max;
int cont;
i=0;
while(string[i]!='\0'){
for(cont=0;string[i]!=' '&& string[i]!='\0';i++)
cont++;
if (cont>max)
max=cont;
++i;
}
return max;
}
int main(void){
char f[100]; #maybe this is the problem?
int i;
printf("input a string: ");
scanf("%s",f);
i=longest_word(f);
printf("%d",i);
return 0;
}
答案 0 :(得分:5)
最简单的调试方法之一是打印您获得的数据,以确保程序符合您的想法。
使用scanf()
时,%s
格式会读取单个“字”,停在第一个空格处。如果您在致电f
后立即打印scanf()
:
printf("Input: <<%s>>\n", f);
你会发现它只包含'联盟'所以它正确地给出了6。严格来说,在使用它之前,你应该检查scanf()
是否确实得到了一些输入:
if (scanf("%99s", f) != 1)
…EOF or error…
您需要使用fgets()
来阅读整行,或者反复调用scanf()
和longest_word()
以获取“传说”和答案7.请注意代码将计算换行符(例如,作为单词的一部分保存在行的末尾fgets()
)。您可能需要检查<ctype.h>
标头并使用isspace()
宏来测试空白区域。
答案 1 :(得分:2)
#include <stdio.h>
int longest_word(const char string[]){
int i;
int max=0;//need initialize
int cont;
i=0;
while(string[i]!='\0'){
for(cont=0;string[i]!=' '&& string[i]!='\0';i++)
cont++;
if (cont>max)
max=cont;
if(string[i]==' ')//Do not increment when string[i]=='\0',,
++i;
}
return max;
}
int main(void){
char f[100];
int i;
printf("input a string: ");
//scanf("%s",f);// a string delimited by white spaces
scanf("%99[^\n]",f);
i=longest_word(f);
printf("%d\n",i);
return 0;
}
答案 2 :(得分:0)
需要初始化变量max。
我认为这是问题所在。
答案 3 :(得分:0)
在循环中使用getc()而不是scanf(),因为scanf在&#39;之后不会考虑输入。 &#39;&#39; \ n&#39; ...,
在scanf()语句之后添加printf()。,U将会知道。