C循环问题,用for不行,while却可以,为什么?求助~!!!!

来源:百度知道 编辑:UC知道 时间:2024/05/29 16:13:22
刚学C,写了个程序,循环出现了点问题,我缩写部分过来,帮忙解决下。
#include<stdio.h>

void menu(void);
void info(void);
void salary(void);

int Num[20];//编号
int allm=0;//工程师总数
float Wage[20],Basic[20],Days[20],Salary[20];//工龄,基本工资,月工作天数,薪水

void main()
{

int a;
char c,d;

while(1)
{
do
{
menu();
printf("请输入您的选择:");
fflush(stdin);
scanf("%d",&a);

switch(a)
{
case 1:
printf(" 1.输入软件测试工程师的基本资料!\n");
info();
break;

case 5:
printf(" 5.计算软件测试工程师的薪水!\n");
salary();
break;
default:
printf("选择错误!");
continue;
}

printf("\n\t[是否继续编辑工程师各项信息?(y/n)(选择否则跳出)]:",c);
fflush(stdin);
scanf("%c",&c);
if(c=='n')
{<

for(i=0;i<allm;i++);
多了一个分号

for(i=0;i<allm;i++); <-有分号
{
if(Num[i]==n)
{I=i;}
}

这样的程序当然编译不会有错误了。
但注意:for(i=0;i<allm;i++);<-分号?
这样一来,for语句与下面{...}就分离开了,也就是空循环。编译程序允许任意的成对{}。
如果你改成:

for(i=0;i<allm;i++) <-没有分号
{
if(Num[i]==n)
{I=i;}
}

程序就可以运行了。

试一试。^0^。你为什么不试一试呢?

for(i=0;i<allm;i++);可以解释为:
for(i=0;i<allm;i++)
;//空语句

你的程序就是:
for(i=0;i<allm;i++)
;//空语句。
{//可有可无
if(Num[i]==n)//这里的i一定是allm-1
{I=i;}
}//可有可无

for语句直接加一个空语句可以用来延时。这是正确的用法。

无条件无限循环应该是for ( ; ; ) {..........}
while (1)虽然无限循环,但有1这个条件,效率上还是for,不过有的编译器很智能,优化的每区别
建议lz要尽量避免使用do while()这类的

不要在写void main()了;C99规定main必须返回int型的值,应该改成int main(void) {...... return 0;}

fflush()用在stdin上结果是未定义的,虽然编译器支持,但最好不要依赖未定义行为

``没准还有地方抄错了,不过我这程序编译的时候没有错误,运行起来错误''