[C程序在执行scanf()并从用户那里获取输入后终止,没有任何错误

问题描述 投票:1回答:4

程序在执行scanf()并接受用户输入后自动终止。

这是一个在给定范围内打印完美数字的程序

#include <stdio.h>

void main() {
    int i, n, j, sum;
    printf("enter the number \n ");
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        sum = 0;
        for (j = 1; j <= i; j++) {
            if (n % j == 0) {
                sum += j;
            }
        }
        if (sum == n) {
            printf("%d", i);
        }
    }   
}

execution image

c scanf
4个回答
1
投票

您的代码中有多个错别字:

  • 您必须停止内循环之前 j,而不是i <= j
  • 您必须计算i % j,而不是n % j
  • 您必须测试if (sum == i),而不是if (sum == n)
  • 您应该在数字后打印换行符以分隔完美的数字。
  • 要搜索范围,必须提示其边界

此处为更正版本:

#include <stdio.h>

int main() {
    int i, start, end, j, sum;

    printf("enter the range: ");
    if (scanf("%d%d", &start, &end) != 2)
        return 1;
    for (i = start; i <= end; i++) {
        sum = 0;
        for (j = 1; j < i; j++) {
            if (i % j == 0) {
                sum += j;
            }
        }
        if (sum == i) {
            printf("%d\n", i);
        }
    }
    // uncomment this if running from an IDE
    //scanf("%*s");
    return 0;
}

如果C0]后<您有可能在IDE中运行程序,而该IDE在执行后不会使终端窗口保持打开状态。您可以在scanf()末尾的scanf("%*s");语句之前添加一个额外的return 0;,以使程序等待更多输入。


0
投票

简单的原因是使用输入main()时,100永远不会是sum,因此不会执行100


0
投票

性能提示-完美数字


-1
投票

您编写的代码仅在n

© www.soinside.com 2019 - 2024. All rights reserved.