我试图在c中打印给定数字的因子,但是当我在控制台中输入数字时,没有任何反应。
#include <stdio.h>
int main() {
int n;
printf("enter the number ");
scanf("%d ", &n);
for(int i = 1; i <= n; i++) {
if(n % i == 0) {
printf("%d", i);
}
}
return 0;
}
这就是为什么你的代码没有像你期望的那样工作:
scanf("%d ",&n);
改为:
scanf("%d", &n); // Remove the space after %d
原因是scanf("%d ", &n)
期望int
后跟一个或多个空格。空格可以是,制表符
t
或换行符n
。当您输入一个数字,然后按enter时,scanf()
通常会消耗除换行符以外的所有内容,但在本例中,它也会消耗换行符,因此它会继续等待输入,直到您输入一个非空白字符。
代码中存在多个问题:
scanf("%d ", &n);
将用户输入转换为以10为基数的整数,并尝试使用后面的任何空白字符。因此,scanf()
将不会返回,直到用户键入一个非空白字符…导致程序在您按进入键后似乎没有做任何事情。这个键在输入流中产生一个换行符('n'
),它是一个空白字符。删除"%d "
的尾随空格来解决这个问题。- 您应该测试
scanf("%d", &n)
的返回值,以检查scanf
是否成功转换了一个数字。如果是,返回值将是1
;如果输入的第一个非空格字符不是数字也不是符号,返回值将是0
;如果在可以转换数字之前到达文件末尾,返回值将是EOF
。 printf("%d", i)
在数字后不输出空格或换行符,因此所有因子将输出为单个数字字符串。
更正后的版本:
#include <stdio.h>
int main() {
int n;
printf("enter the number ");
if (scanf("%d", &n) == 1) {
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
printf("%dn", i);
}
}
}
return 0;
}