无法在循环内使用fscanf()输入元素

时间:2015-02-15 08:06:21

标签: c

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    int N, M, i, a, b, k, total = 0;
    fscanf(stdin, "%d %d", &N, &M);
    fprintf(stdout, "N: %d, M: %d\n", N, M);

    for(i=0 ; i<M ; i++){
        fflush(stdin);
        fscanf(stdin, "%d, %d, %d", &a, &b, &k);
        fflush(stdout);
        fprintf(stdout, "A: %d, B: %d, K: %d\n", a, b, k);
        total += (((b-a)+1)*k);
        fprintf(stdout, "total: %d\n", total);
    }
    total = total/N;
    fprintf(stdout, "%d\n", total);
    return 0;
}

fscanf(stdin, "%d, %d, %d", &a, &b, &k);第一次执行,但之后没有执行。即使是第一次,只有变量a的值是正确的,对于变量bk为零。尝试使用fflush(stdin) 在每次输入之前清除stdin,但它没有用。请帮忙。

[评论更新:] 不,我没有输入逗号。

2 个答案:

答案 0 :(得分:1)

fscanf(stdin, "%d, %d, %d", &a, &b, &k);

格式字符串

"%d, %d, %d"

这意味着fscanf要求您输入一个数字,然后一个逗号,然后该空格会丢弃任意数量的空白字符,包括无数字(这是%d多余的已经跳过它们然后期望一个数字,一个逗号,任意数量的空格字符,包括无,然后是数字。

您输入三个以空格分隔的数字。 fscanf读取第一个数字,但无法扫描逗号。对fscanf的其他调用首先需要一个数字,但在stdin中找到一个逗号,因此失败。

要解决此问题,请更改

fscanf(stdin, "%d, %d, %d", &a, &b, &k);

fscanf(stdin, "%d %d %d", &a, &b, &k);

或者

fscanf(stdin, "%d%d%d", &a, &b, &k);

答案 1 :(得分:-1)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    int N, M, i, a, b, k, total = 0;
    fscanf(stdin, "%d %d", &N, &M);
    fprintf(stdout, "N: %d, M: %d\n", N, M);

    for(i=0 ; i<M ; i++){
        fflush(stdin);
        fscanf(stdin, "%d %d %d", &a, &b, &k);
        fflush(stdout);
        fprintf(stdout, "A: %d, B: %d, K: %d\n", a, b, k);
        total += (((b-a)+1)*k);
        fprintf(stdout, "total: %d\n", total);
    }
    total = total/N;
    fprintf(stdout, "%d\n", total);
    return 0;
}