在写一道单词单词个数统计的题时,运行出来这样一个错误
下面是源码
#include<stdio.h>
int fun(char* s)
{
int i, j=0;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] != ' ' && (s[i + 1] == ' ' || s[i + 1] == '\0'))
{
j++;
}
}
return j;
}
int main()
{
int t = 0;
char s[100];
gets(s);
t = fun(s);
printf("%d", t);
return 0;
}
下面是运行结果
接下来是错误
这怎么解决呀?
修改如下:
#include<stdio.h>
int fun(char* s)
{
int i, j=0;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] != ' ')
{
j++;
}
}
return j;
}
int main()
{
int t = 0;
char s[100];
gets(s);
t = fun(s);
printf("%d", t);
return 0;
}
char s[100]改成char s[100] = {0};试试
s[i] != '\0'不能保证循环体内的s[i+1]不等于'\0'
#include<stdio.h>
#include <ctype.h> //for isspace()
int fun(char* s)
{
int i, j=0;
i = 0;
while (s[i]) { //remove space at head
if (!isspace(s[i]))
break;
i++;
}
//for (i = 0; s[i] != '\0'; i++)
for (; s[i] != '\0'; i++)
{
/*
if (s[i] != ' ' && (s[i + 1] == ' ' || s[i + 1] == '\0'))
{
j++;
}
*/
if (isspace(s[i]) && (i > 0 && !isspace(s[i-1])))
j++;
}
return j;
}
int main()
{
int t = 0;
char s[100];
fgets(s, 100, stdin);
t = fun(s);
printf("%d", t);
return 0;
}
供参考~
循环里改成判断字符串长度,就可以了:
#include<stdio.h>
#include<string.h>
int fun(char* s)
{
int i, j=0;
for (i = 0; i< strlen(s);i++)//s[i] != '\0'; i++)
{
if (s[i] != ' ' && (s[i + 1] == ' ' || s[i + 1] == '\0'))
{
j++;
}
}
return j;
}
int main()
{
int t = 0;
char s[100];
gets(s);
t = fun(s);
printf("%d", t);
return 0;
}