#include <stdio.h> #include <stdlib.h> int main() { int n,m,i; i=1; m=1; scanf("%d",&n); if(n<=1||n>=9) { printf("重新输入\n"); } else { while(i<=n) { m=m*i; i=i+1; } } printf("%d\n",m); system("pause"); return 0; } 另一种方法 |
#include <stdio.h> #include <stdlib.h> int main() { int n,m,i; i=1; m=1; scanf("%d",&n); if(n<=1||n>=9) { printf("重新输入\n"); } else { while(i<=n) { m=m*i; i=i+1; } } printf("%d\n",m); system("pause"); return 0; } |
981013 发表于 2014-1-27 13:47 非常感谢~!! |
第一遍输入数字是在第4行,之后你并没有像第8、9行那样跟着输出一个提示信息啊。 |
本帖最后由 河蟹 于 2014-1-26 23:01 编辑 这是当然的事情了,你的printf语句放在scanf语句后面,相当于,如果没有输入正确数字的话,优先执行的是scanf语句。当然会要你再输入一次的说 |
本帖最后由 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时就会出问题,且你没有考虑到若用户输入的第二个值仍不合法怎么办(此时应不断要求用户输入值,直至输入数据合法为止),因此该句应改为
这句不管是从程序流程还是语句本身来说都没有用途,首先前面的语句已经确保1<=n<=9了。然后,C语言不支持判断一个数是否大于(等于)一个数的同时还小于(等于)另一个数(有点绕),即if(0<a<10),while(1000>=a>=99)这类语句都是不正确的,在啊哈C这里这类语句不会被当做是错误,但无论如何()内的表达式始终被认为是真,例如:
这一段不论a的值为-1,0,100,1000,50或是什么其他的数,都会永不停止的打出yes,即发生了死循环。 因此在进行这类判断时,因写成if(n>=1&&n<=9)的形式。 另外:
|