0

在学习了 Java(以及其他语言)之后,我正在学习 C,我对如何处理这个简单的问题感到有些困惑。我需要编写一个程序,它将以一行的形式输入。比如5 2 75 43 68(只有ints),我需要返回ints的个数,它们的总和,以及正负数的个数。

问题是输入的数量显然是可变的——可能有一个 int 或七个,但都将在一行上。我不确定如何使用 C 来处理可变数量的输入。有人可以指出我正确的方向吗?

4

3 回答 3

1

要处理可变数量的输入,您需要循环和 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,因此接受输入的过程终止!

干杯!

于 2013-01-28T01:09:17.307 回答
0

输入一个字符串,然后搜索空格,然后转换该位置的每个数字并将其添加到计数和求和中。这样,您只需要在输入行的缓冲区上设置上限;你不使用数组,所以你不需要限制整数的数量,也不需要搞乱动态分配。

编辑:在 Kerrek SB 的格式中,fgetscombinestrchrstrtol. :P

于 2013-01-28T01:05:28.417 回答
0
#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);

}   
于 2013-01-28T01:15:43.423 回答