读取char后忽略scanf()值

时间:2016-08-30 12:24:46

标签: scanf

在Hackerrank上遇到了更熟悉C(++)的问题。使用scanf()我想读一行包含一堆不同的值。

问题是char之后的值被忽略。读取解决方案是在char之前添加一个空格,但我已经尝试在每个值的单独行上运行scanf(),并且只保留char前面的空间但仍然存在问题。

要学习的课程似乎是使用scanf()而不是任何其他类型的输入方法。所以没有cin或fscanf()的阅读。这个原因可以在同一条线上读取所有类型的值。因此,我不想在读取输入时使用这一行。

#include <iostream>
#include <cstdio>

using namespace std;

int main() {
    int i;
    long l;
    long long ll;
    char c;
    float f;
    double d;

    /** Read "3 444 12345678912345 a 334.23 14049.30493" from stdin */
    scanf("%i %ld %lld %c %f %lf", &i, &l, &ll, &c, &f, &d);

    printf("%d\n", i);      // 3, as expected
    printf("%ld\n", l);     // 444 also as expected
    printf("%lld\n", ll);   // 12345678912345 ...
    printf("%c\n", c);      // 'a' 
    printf("%f\n", d);      // 14049.30493 ?? It should be: 334.23
    printf("%lf\n", d);     // 14049.30493 but this time as it should be.

    return 0;
}

1 个答案:

答案 0 :(得分:0)

scanf("%i %ld %lld %c %f %lf", &i, &l, &ll, &c, &f, &d);
                                                 ^
                                                !F!  D

printf("%d\n", i);
printf("%ld\n", l);
printf("%lld\n", ll);
printf("%c\n", c);
printf("%f\n", d);      // < D!
printf("%lf\n", d);     // < D!

您正在打印d变量两次,而不是f