在学习了 Java(以及其他语言)之后,我正在学习 C,我对如何处理这个简单的问题感到有些困惑。我需要编写一个程序,它将以一行的形式输入。比如5 2 75 43 68
(只有int
s),我需要返回int
s的个数,它们的总和,以及正负数的个数。
问题是输入的数量显然是可变的——可能有一个 int 或七个,但都将在一行上。我不确定如何使用 C 来处理可变数量的输入。有人可以指出我正确的方向吗?
要处理可变数量的输入,您需要循环和 scanf 直到您按下 (Ctrl+D) 下面是一个示例:
int n,sum=0,count=0;
while(scanf("%d",&n)!=EOF)
{
sum=sum+n;
count++;
}
printf("sum=%d,count=%d",sum,count);
注意:当您按下 Ctrl+D 时,scanf 返回 -1,因此接受输入的过程终止!
干杯!
输入一个字符串,然后搜索空格,然后转换该位置的每个数字并将其添加到计数和求和中。这样,您只需要在输入行的缓冲区上设置上限;你不使用数组,所以你不需要限制整数的数量,也不需要搞乱动态分配。
编辑:在 Kerrek SB 的格式中,fgets
combinestrchr
和strtol
. :P
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buffer[200];
int numbers[100];
int main() {
char *ptr;
int cnt = 0;
fgets(&buffer[0], 200, stdin); // Get the string
ptr = strtok(buffer, " "); // Split in every space
do {
printf("Number %d: %s\n", cnt, ptr);
numbers[cnt] = strtol(ptr, NULL, 0); // Grab number
cnt++;
} while((ptr = strtok(NULL, " ")));
printf("Total numbers: %d\n", cnt);
}