在c中打印给定数字的因子

  • 本文关键字:数字 打印 c
  • 更新时间 :
  • 英文 :


我试图在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;
}

最新更新