我有一个赋值,要求我进行一次扫描,并对几个整数执行一些数学运算。输入中的第一个数字设置了要遵循的整数的数量,即: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
做到这一点。
#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( "nn%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的评论让我想试试。
以下代码对我有效:
#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;
}
阿斯莱,你的回答让我很困惑,因为我看不出你的代码会如何完成与我所做的不同的事情。因此,当我调试scanf返回的内容时,我注意到scanf实际上在每个空格后都会返回,而不是像我想象的那样在"enter"或"\n"上返回。所以我简化了我的第一个for循环,一切都正常。那么,我说的一个scanf的输入将满足对后续scanf的变量赋值,只要有足够的后续调用scanf,这是正确的吗?换言之,如果我在一次扫描中输入3 25 17,那么我可以在随后的扫描调用中将这些数字中的每一个分配给变量,而无需按enter?
scanf("%d",&var1); //(where var1=3)
scanf("%d",&var2); //(where var2=25)
scanf("%d",&var3); //(where var3=17)