读书人

字符串的小疑点

发布时间: 2012-03-09 21:42:55 作者: rapoo

字符串的小问题
#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);
}
此题目的意思在键盘上输入一组字符 输出有几个单词哦

[解决办法]

C/C++ code
#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,所以结果无法预测。
[解决办法]
错误比较多
[解决办法]
C/C++ code
#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明显有误人之嫌,呵呵,,倘若不小心多敲了几个空格那岂不是错大了
C/C++ code
#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个字符才能运行
[解决办法]
探讨
首先scanf()不能读取空格所以用了gets()..再者才c_park明显有误人之嫌,呵呵,,倘若不小心多敲了几个空格那岂不是错大了

C/C++ code#include <stdio.h>
#define N 40
int 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;
i…

[解决办法]
还有一个大问题,楼主的

int w;

是在程序中间????
这是什么习惯?C语言是不允许地,C++倒是可以,但是,C++是给懒人用的,并且随便哪都声明变量你怎么维护啊?
[解决办法]
我也想了解,谢谢LZ.

读书人网 >C语言

热点推荐