还是C语言问题,想不通,急

来源:百度知道 编辑:UC知道 时间:2024/09/22 20:18:33
题目很容易,输入一串小于80字符的字符串,当输入“?”时,结束,输出该字符串的长度,也就是说该字符串里面有几个字符
书上的程序是这样的:
#include<stdio.h>
void main()
{
int count=0,i=0;
char s[80];
while((s[i]=getchar())!='?')
i++;
s[i]='\0';
for(i=0;s[i]!='\0';i++)
count++;

printf("count=%d\n",count);
}
我只是想把while循环换成for循环,把程序改成了这样:
#include<stdio.h>
void main()
{
int count=0,i;
char s[80];
for(i=0;s[i]!='?';i++)
getchar(s[i]);
s[i]='\0';
for(i=0;s[i]!='\0';i++)
count++;

printf("count=%d\n",count);
}
改成这样运行后,可以输入字符串,但是输入?再回车没任何反应,还能继续输入字符;而书上的程序当输入?再回车后,便会在后面输出count等于一个值,就是字符的个数,我的为什么不能输出count的值,郁闷,谁帮我解释下为什么,怎么改才对。

我根据你的程序进行了修改,修改后的程序如下:
#include<stdio.h>
void main()
{
int count=0,i=0;
char s[80];
while((s[i]=getchar())!='?')
i++;
s[i]='\0';
for(i=0;s[i]!='\0';i++)
count++;

printf("count=%d\n",count);
}

解释:(一)getchar()函数本来就是没有参数的函数,getchar(s[i])语句中的s[i]没有任何意义,就相当于getchar(),于是就一直要你输入字符。
(二)for循环与while循环是不同的,若使用while循环,输入字符后,马上就进行判断,而用for循环时,输入字符后,它还要执行i++,使i值加1,再进行判断,若你第i个输入“?”,执行s[i]!='?'时中的i实际上的值已经是i+1,所以for循环中应用s[i-1]!='?',当然s[i]='\0'; 也应此改为s[i-1]=‘\0'。
我回答之前只看到2个回答,回答之后再一看有6个回答了,看来是多此一举了,呵呵。

#include<stdio.h>
void main()
{
int count=0,i;
char s[80],c;
for(i=0;;i++)
{c=getche(); /*你们写的都没有先判断后输出的原则,如果用一个字符C来先接收输入的字符在判断是否为“?"*/
if(c=='?')break;
else s[i]=c;
}
s[i]='\0';
for(i=0;s[i]!='\0';i++)