c语言高手请进 帮帮小菜

来源:百度知道 编辑:UC知道 时间:2024/05/16 20:20:02
(下面的函数只是为了高手们更清楚小弟提问
没有必要讨论它的功能)
#include<stdio.h>
void main()
{

int i,a[5],b;
start:
for(i=0;i<5;i++)
{
printf("输入数组");
scanf("%d",&a[i]);
if(a[i]<0||a[i]>1000) //我只是想限制范围
{
printf("输入错误\n");
return;
}
}
for(i=0;i<5;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
printf("输入1继续\n");
scanf("%d",&b);

if(b==1)goto start;

}
上面的函数如果我把
if(a[i]<0||a[i]>1000)
{
printf("输入错误\n");
return;
}
删去 当输入的是英文时 例如a[0]='c'为什么a[1],a[2]……会自动有值生成
还有当我没删除这语句时 我第二次执行时(也就是首先正确输入一次数组再输入1重新输入时)我输入的是c,它就没有执行if后面的语句。进入了死循环。为什么if语句第二次执行会失效。是return语句的问题吗?如何解决?

a[5]数组你没给值前本来就会有自动的值的,所以在定义数组后一定要给个初值.比如定义这样写
int a[5]={0,0,0,0,0};
或者:
int a[5];
int i;
for(i=0;i<5;i++)
a[i]=0;

总之定义完数组后一定要先给好初始值.否则会出乱子,这是经验之谈.

前面也有朋友说了a[0] = 'c' =99 在0~1000范围内自然不会输出错误.

a[i]<0||a[i]>1000这里有问题.
应该是a[i]>0||a[i]<1000或a[i]<0&&a[i]>1000吧
而且在那不应该是return而是重新输入才合理.
还有,请不要用goto.

a[0] = 'c' ,这样a[0]中保存的是c的ASCII码值: 99
多看看C的基础部分,关于字符的.

首先,goto破坏了程序的良好结构,使得模块不再是“单入单出”,这是很糟糕的事情。现在都不提倡用goto语句,goto语句使程序的静态结构和程序的动态执行之间有很大的差别,这样使程序难以阅读,难以查错。对一个程序来说,人们最关心的是他运行的正确与否,去掉goto语句后,可以直接从程序结构上反映程序的运行过程。这样,不仅使程序的结构清晰、便于阅读,便于查错,而且也有利于程序正确性的证明。
建议你使用for 或while语句来实现你的构造思想.
下面是我写的能实现你想要的功能:
#include<iostream.h>
void p();
void k()
{
int c;
cout<<"输入1继续:";
cin>>c;
if(c==1)
p();
else
cout<<"请关闭程序!";
cout<<endl;
}
void p()
{