在学习了 Java(以及其他语言)之后,我正在学习 C,我对如何处理这个简单的问题感到有些困惑。我需要编写一个程序,它将以一行的形式输入。比如5 2 75 43 68(只有ints),我需要返回ints的个数,它们的总和,以及正负数的个数。
问题是输入的数量显然是可变的——可能有一个 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 的格式中,fgetscombinestrchr和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);
}