手游诛仙法宝:C语言高手帮忙啊

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 06:14:42
我的目的是当输入小于0的数时提示Error!Enter a number again:,然后按提示继续输入数.运行后,当输入第一个小于0的数时,程序正常显示Error!Enter a number again:但是如果接着输入的还是小于0的数时程序输入m=1或者5了.我用goto语句可以完全实现我的意图,但好像用goto语句不太好,高手可以指点一下么:不用goto语句而且不要大修改我下面的程序就可以实现我的意图.非常感谢!
#include <stdio.h>
main()
{ int a;
printf("Enter a number:\n");
scanf("%d",&a);
if(a<0)
{
printf("Error!Enter a number again:\n");
scanf("%d",&a);
}
switch(a/10)
{case 0:printf("m=1\n");break;
case 1:printf("m=1\n");break;
case 2:printf("m=1\n");break;
case 3:printf("m=2\n");break;
case 4:printf("m=3\n");break;
case 5:printf("m=4\n");break;
default:printf("m=5\n") ;
}
}

分析你的程序 RUN
Enter a number
输入一个负数,RUN
Error!Enter a number again
再输入一个负数,RUN
运行程序直接进入switch,
就出现了 你所说的情况.原因就是if是选择结构控制语句,它不循环,也不返回.
你把if语句改为while语句,就可以了. 因为while语句是循环结构控制语句.
直到a>=0了它才结束.

#include <stdio.h>
void main()
{
int a;
printf("please input a num:");
do
{
scanf("%d",&a);
if(a<0)
printf("Error!Enter a number Again:\n");
} while(a<0);
switch(a/10)
{
case 0:printf("m=1\n");break;
case 1:printf("m=1\n");break;
case 2:printf("m=1\n");break;
case 3:printf("m=2\n");break;
case 4:printf("m=3\n");break;
case 5:printf("m=4\n");break;
default:printf("m=5\n") ;
}
}

#include <stdio.h>
main()
{ int a;
printf(\"Enter a number:\\n\");
for(;;)
{
scanf(\"%d\",&a);
if(a<0)
{
printf(\"Error!Enter a number again:\\n\");

}
else break;
}
switch(a/10)
{case 0:printf(\"m=1\\n\");break;
case 1:printf(\"m=1\\n\");break;
case 2:printf(\"m=1\\n\");break;
case 3:printf(\"m=2\\n\");break;
case 4:printf(\"m=3\\n\");break;
case 5:printf(\"m=4\\n\");break;
default:printf(\"m=5\\n\") ;
}
getch();
}

用个do...while语句就可以实现了,修改如下:
#include <stdio.h>
void main()
{
int a;
printf("Enter a number:\n");
scanf("%d",&a);
if(a<0)
{
do
{
printf("Error!Enter a number Again:\n");
scanf("%d",&a);
}
while(a<0);
}
switch(a/10)
{
case 0:printf("m=1\n");break;
case 1:printf("m=1\n");break;
case 2:printf("m=1\n");break;
case 3:printf("m=2\n");break;
case 4:printf("m=3\n");break;
case 5:printf("m=4\n");break;
default:printf("m=5\n") ;
}
}