在一行输入几个整数,返回整数

时间:2013-01-28 01:01:27

标签: c input

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

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

3 个答案:

答案 0 :(得分: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,因此输入的过程终止!

干杯!

答案 1 :(得分:0)

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

编辑:在Kerrek SB的格式中,合并fgetsstrchrstrtol。 :P

答案 2 :(得分: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);

}