|
本帖最后由 981013 于 2014-1-27 13:55 编辑
这段代码问题很多……{:soso_e127:}
首先要认识到,计算机执行代码的顺序和你写代码的顺序是一样的,因为你先写了
scanf("%d",&n); 然后才是
因此计算机照着执行,即先等待用户输入一个值,再输出“重新输入”。
而且,这里你用的是if(n<=1||n>=9)
如果按你的要求,即输入的值为1~9(包含1和9)的数字,那么也就是说n<1||n>9这个范围内的数才是不合法的,若按n<=1||n>=9来做,输入1和9时就会出问题,且你没有考虑到若用户输入的第二个值仍不合法怎么办(此时应不断要求用户输入值,直至输入数据合法为止),因此该句应改为
接下来一句if(1<=n<=9)
这句不管是从程序流程还是语句本身来说都没有用途,首先前面的语句已经确保1<=n<=9了。然后,C语言不支持判断一个数是否大于(等于)一个数的同时还小于(等于)另一个数(有点绕),即if(0<a<10),while(1000>=a>=99)这类语句都是不正确的,在啊哈C这里这类语句不会被当做是错误,但无论如何()内的表达式始终被认为是真,例如:
- while(1<=a<=99)
- {
- printf("yes\n");
- a++;
- }
复制代码
这一段不论a的值为-1,0,100,1000,50或是什么其他的数,都会永不停止的打出yes,即发生了死循环。
因此在进行这类判断时,因写成if(n>=1&&n<=9)的形式。
另外:
可以简写成:
最后附上完全修改完后的代码:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int n,m,i;
- i=1;
- m=1;
- scanf("%d",&n);
- while(n<1||n>9)
- {
- printf("重新输入\n");
- scanf("%d",&n);
- }
- while(i<=n)
- {
- m=m*i;
- i=i+1;
- }
- printf("%d\n",m);
- system("pause");
- return 0;
- }
复制代码
|
|