C-我的scanf从不停止输入
所以,当我觉得制作一个简单的阶乘计算器是个好主意的时候,我正在处理一些循环。代码如下:C-我的scanf从不停止输入,c,for-loop,compilation,scanf,factorial,C,For Loop,Compilation,Scanf,Factorial,所以,当我觉得制作一个简单的阶乘计算器是个好主意的时候,我正在处理一些循环。代码如下: #include <stdio.h> int main(int argc, char const *argv[]) { int num; int ans; printf("Enter any number: "); scanf("%d", &num); ans = num; for (int i = (num-1); i = 1
#include <stdio.h>
int main(int argc, char const *argv[])
{
int num;
int ans;
printf("Enter any number: ");
scanf("%d", &num);
ans = num;
for (int i = (num-1); i = 1; --i)
{
ans *= i;
}
printf("%d! is %d \n", num, ans);
return 0;
}
#包括
int main(int argc,char const*argv[]
{
int-num;
INTANS;
printf(“输入任何数字:”);
scanf(“%d”和&num);
ans=num;
for(int i=(num-1);i=1;--i)
{
ans*=i;
}
printf(“%d!是%d\n”,num,ans);
返回0;
}
很简单。然而,我的问题是,当我必须输入一个数字时,例如5,scanf永远不会停止。它并没有继续执行,而是允许我在按下enter键后输入更多的数字。事实上,它从未停止过,我可以连续数小时不运行它。知道为什么吗
我和5个人做了案头核对!它工作了,但我根本无法编译它
谢谢。这应该可以:
#include <stdio.h>
int main() {
int num;
int ans;
printf("Enter number: ");
scanf(" %d", &num);
ans = num;
for(int i = (num - 1); i > 1; --i)
ans = ans * i;
printf("%d! is %d\n", num, ans);
return 0;
}
#包括
int main(){
int-num;
INTANS;
printf(“输入编号:”);
scanf(“%d”和&num);
ans=num;
对于(inti=(num-1);i>1;--i)
ans=ans*i;
printf(“%d!是%d\n”,num,ans);
返回0;
}
修改:
i=1
更改为i>1
#include <stdio.h>
int main() {
int num;
int ans;
printf("Enter number: ");
scanf(" %d", &num);
ans = num;
for(int i = (num - 1); i > 1; --i)
ans = ans * i;
printf("%d! is %d\n", num, ans);
return 0;
}
#包括
int main(){
int-num;
INTANS;
printf(“输入编号:”);
scanf(“%d”和&num);
ans=num;
对于(inti=(num-1);i>1;--i)
ans=ans*i;
printf(“%d!是%d\n”,num,ans);
返回0;
}
修改:
i=1
更改为i>1
scanf()
而是for
循环,该循环从未停止,因为在for
循环条件下,您正在将1
分配给i
:
for (int i = (num-1); i = 1; --i)
^^^^^
for
循环在执行循环体之前评估条件,条件i=1
将始终评估为true
。执行循环体后,i
递减,然后再次评估条件,将1
分配给i
。因此,循环最终会无限执行
将循环条件的更改为i>1
:
for (int i = (num-1); i > 1; --i)
这不是scanf()
而是for
循环,该循环从未停止,因为在for
循环条件下,您正在将1
分配给i
:
for (int i = (num-1); i = 1; --i)
^^^^^
for
循环在执行循环体之前评估条件,条件i=1
将始终评估为true
。执行循环体后,i
递减,然后再次评估条件,将1
分配给i
。因此,循环最终会无限执行
将循环条件的更改为i>1
:
for (int i = (num-1); i > 1; --i)
为什么循环条件中有i=1?编译器应该用“somename.c:13:29:警告:将赋值结果用作不带括号的条件[-wparenthess]”来警告您。你没看到那个警告吗?根本没有警告。什么都没有,因为在编译器读取printf之后,我根本无法运行程序。然而,这是个错误。谢谢可能是因为您没有使用-Wall。当您在调试器中运行程序时,您没有看到它将进入for
语句并永远循环吗?为什么您认为它被困在scanf
?为什么在循环条件中有i=1?编译器应该用“somename.c:13:29:警告:使用赋值结果作为不带括号[-wparenthes]的条件”来警告您。你没看到那个警告吗?根本没有警告。什么都没有,因为在编译器读取printf之后,我根本无法运行程序。然而,这是个错误。谢谢可能是因为您没有使用-Wall。当您在调试器中运行程序时,您没有看到它将进入for
语句并永远循环吗?你为什么认为它卡在了scanf中?非常感谢!问题是你指出的情况。非常感谢!问题是你指出的情况。