我在学习Java(以及其他语言)之后学习C,而且我对如何处理这个简单问题感到有些困惑。我需要编写一个以一行形式输入的程序。例如,5 2 75 43 68
(仅int
s),我需要返回int
s的数量,它们的总和以及正数和负数的数量。
问题在于输入的数量显然是可变的 - 可能有一个int或七个,但所有输入都在一行上。我不确定如何使用C来处理可变数量的输入。有人能指出我正确的方向吗?
答案 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的格式中,合并fgets
,strchr
和strtol
。 :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);
}