提取用空格分隔的数字的最佳方法?在C.

时间:2014-09-14 21:12:54

标签: c spaces

从说" 55 117 28"中提取数字的最佳方式是什么?用空格分隔,以便我将它们存储在变量中,之后再做算术方程式。 即:

用户输入:55 117 25 。 。

printf(" The Total is %.2f\n", total);  // prints 197.00

printf(" The first number * secondNumber is %.2f\n", total);  // prints 6435.00

编辑:为了明确这一点,我不是在寻找我的算术例子的答案,而是从用户输入中提取数字的方法,例如" 55 48 862 21&# 34;或者" 45 89 631 574 85 12 745 685 2541 ..."等等

2 个答案:

答案 0 :(得分:3)

int x;
int sum = 0;


while ( scanf( "%d", &x ) > 0 ) sum += x;

如果您想要从字符串中提取数字,例如

char numbers[] = "55 117 25";

然后您可以使用sscanf ibstead scanf

例如

while ( sscanf( numbers, "%d", &x ) > 0 ) sum += x;

要阅读一串数字,您可以使用函数fgets

至于浮点数的格式说明符,那么你已经在问题中指定了它。

答案 1 :(得分:1)

#include <stdio.h>

int wordCount(const char *s);//

int main(void){
    char line[4096];

    printf("user input : ");
    fgets(line, sizeof(line), stdin);

    int wc = wordCount(line);//number of elements in the space-delimited
    double nums[wc];

    int len, c = 0;
    char *s = line;
    double x, total=0.0;
    while(1==sscanf(s, "%lf%n", &x, &len)){
        total += (nums[c++] = x);
        s += len;
    }
    printf(" The Total is %.2f\n", total);
    printf(" The first number * secondNumber is %.2f\n", nums[0] * nums[1]);
    return 0;
}

int wordCount(const char *s){
    char prev = ' ';
    int wc = 0;

    while(*s){
        if(isspace(prev) && !isspace(*s)){
            ++wc;
        }
        prev = *s++;
    }
    return wc;
}