0

我有一个任务要求我进行一次 scanf 并对几个整数执行一些数学运算。输入中的第一个数字设置要跟随的整数的数量,即:3 45 67 18 应解释为 N var1 var2 var3,4 100 23 76 92 应解释为 N var1 var2 var3 var4。我无法按照我第一次迭代的指示制作程序,但它确实按预期工作。我通过简单地将scanf放在一个运行N次的循环中并将剩余的数字存储在数组n [1000]中来完成存储var1 var2 ... varN。就像我说的那样,该程序可以工作......有点,但它并没有按照任务指示的方式工作。作业提供的样本运行应该是:

Please enter n followed by n numbers: 3 6 12 17

Test case #1: 6 is NOT abundant.
Test case #2: 12 is abundant.
Test case #3: 17 is NOT abundant.

我的程序输出是:

Please enter n followed by n numbers: 3
6
12
17
Test case #1: 6 is NOT abundant.
Test case #2: 12 is abundant.
Test case #3: 17 is NOT abundant.

这是我的程序的链接。我已经阅读了许多类似的问题,但大多数似乎都忽略了 scanf 的使用,而不是其他从控制台捕获输入的方法。这篇文章非常接近我正在寻找的答案,除了我需要动态设置的变量数量。我有一种感觉我需要使用 malloc 函数,但我只是不太确定如何使用它并且仍然完成单行 scanf 输入。

谢谢

4

2 回答 2

1

好的,我对其进行了测试,您确实可以使用scanf.

#include<stdio.h>

int main(){
    int total = 0;
    int args;
    char newline;
    do{
        int temp; 
        args = scanf( "%d%c", &temp, &newline );
        if( args > 0 )
            total += temp;
        puts( "Internal loop print test");
    } while( newline != '\n' );
    printf( "\n\n%d", total );
    return 0;
}

控制台日志:

1 2 3 9
Internal loop print test
Internal loop print test
Internal loop print test
Internal loop print test


15

scanf编辑:由于几个已知的漏洞问题,我从不使用该系列,但我什至没有尝试使用scanf. 我以为它会读到换行符,但它与scanf. Aniket 的评论让我想尝试一下。

于 2013-02-07T19:50:44.867 回答
1

以下代码对我有用:

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
    int n[1000],i,j,sum,size;

    printf("Please enter n followed by n numbers: ");
    scanf("%d",&n[0]);

    for (i=1;i<=n[0];i++)
            scanf("%d",&n[i]);

        /* Debug: Automatically generate numbers from 1 to n[0] */
        //n[i]=i

    for (i=1;i<=n[0];i++)
    {
        /* Debug: See what numbers are being used in sum - Part 1*/
        //printf("\nFactors < %d of %d: ",n[i]/2,n[i]);
        sum=0;
        for (j=1;j<=n[i]/2;j++)
        {

            if (n[i]%j==0)
            {
                /* Debug: See what numbers are being used in sum - Part 2*/
                //printf("%d ",j);
                sum+=j;
            }

        }
        printf("Test case #%d: %d is%sabundant.\n",i,n[i],(sum>n[i])?" ":" NOT ");

        /* Debug: See what numbers are being used in sum - Part 3*/
        //printf("(%d)\n",sum);
    }
    system("PAUSE");    
    return 0;
}

Aslai 您的回答让我感到困惑,因为它看不到您的代码将如何完成与我所做的不同的任何事情。因此,当我调试 scanf 返回的内容时,我注意到 scanf 实际上在每个空格之后返回,而不是像我想的那样在“enter”或“\n”上返回。所以我简化了我的第一个 for 循环,一切正常。那么我是否正确地说,只要有足够的后续对 scanf 的调用,来自一个 scanf 的输入将满足对后续 scanf 的变量分配?换句话说,如果我在单个 scanf 期间输入 3 25 17 ,那么我可以将这些数字中的每一个分配给随后的 scanf 调用的变量,而无需按 Enter 键?

scanf("%d",&var1); //(where var1=3)
scanf("%d",&var2); //(where var2=25) 
scanf("%d",&var3); //(where var3=17)
于 2013-02-07T21:24:28.370 回答