读书人

数组输入几时是尽头

发布时间: 2012-11-05 09:35:12 作者: rapoo

数组输入何时是尽头

C/C++ code
#include<stdio.h>int main(void){    int ar[400];    int count=1;    int i=0;    printf("Enter some numbers:\n");    while(scanf("%d",&ar[i])==1&&ar[i]!='\n')//这个判断条件哪里不对了?为什么不能结束输入    {        i++;        count++;    }    for(i=count;i>0;i--)        printf("%d",ar[i]);    return 0;}


[解决办法]
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
whlie (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
whlie (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。

参考下面:
C/C++ code
#include <stdio.h>char s[]="123 ab 4";char *p;int v,n,k;void main() {    p=s;    while (1) {        k=sscanf(p,"%d%n",&v,&n);        printf("k,v,n=%d,%d,%d\n",k,v,n);        if (1==k) {            p+=n;        } else if (0==k) {            printf("skip char[%c]\n",p[0]);            p++;        } else {//EOF==k            break;        }    }    printf("End.\n");}//k,v,n=1,123,3//k,v,n=0,123,3//skip char[ ]//k,v,n=0,123,3//skip char[a]//k,v,n=0,123,3//skip char[b]//k,v,n=1,4,2//k,v,n=-1,4,2//End. 

读书人网 >C++

热点推荐