字符串的小问题
#include<stdio.h>
#define N 20
void main()
{ char c[N];
for(int i=0;i<N;i++)
scanf("%c",&c[i]);
for(i=0;i<N;i++)
printf("%c",c[i]);
i=0;
int w=0;
while(c[i]!='\0')
{
while(c[i]!=' ')
{i++;
if(c[i]==' ')
{ w++;
break;}
}
i++;
while(c[i]==' ')
{i++;
if(c[i]!=' ')
{
break;
}
}
}
printf("there are %d words",w);
}
此题目的意思在键盘上输入一组字符 输出有几个单词哦
[解决办法]
#include <stdio.h>#define N 20void main(){ char c[N]; int i;for(i=0;i <N;i++)scanf("%c",&c[i]);for(i=0;i <N;i++)printf("%c",c[i]);i=0;int w=0;while(c[i]!='\0'){ if(c[i]==' ') { w++; } ++i;} ++w;printf("there are %d words\n",w);system("pause");return 0;}
[解决办法]
while(c[i]!='\0')
字符数组c中没有null结束字符'\0',所以程序会出现逻辑错误。
运行之后,程序从c(内存地址)开始,在内存中直到找到null字符才结束,而你所控制的字符串中没有null,所以结果无法预测。
[解决办法]
错误比较多
[解决办法]
#include <stdio.h>#define N 40int main(){ char c[N]; int i; /*for(i=0;i <N;i++) scanf("%c",&c[i]); for(i=0;i <N;i++) printf("%c",c[i]);*/ gets(c); //读入一整行,不以空格分开... printf("%s\n",c); i=0; int w=0; while(c[i]!='\0') { if(c[i]==' ') { w++; } ++i; } ++w; printf("there are %d words\n",w); return 0;}
[解决办法]
首先scanf()不能读取空格所以用了gets()..再者才c_park明显有误人之嫌,呵呵,,倘若不小心多敲了几个空格那岂不是错大了
#include <stdio.h>#define N 40int main(){ char c[N]; int i; /*for(i=0;i <N;i++) scanf("%c",&c[i]); for(i=0;i <N;i++) printf("%c",c[i]);*/ gets(c); //读入一整行,不以空格分开... printf("%s\n",c); i=0; int w=0; while(c[i]!='\0') { if(c[i]==' '&&c[i+1]!=' ')//------------------------------------------------ { w++; } ++i; } ++w; printf("there are %d words\n",w); return 0;}
[解决办法]
for(int i=0;i <N;i++)
scanf("%c",&c[i]);
这样设计的话岂不是要全部输入完20个字符才能运行
[解决办法]