scanf后,printf输出被“\ n”破坏

时间:2013-01-25 21:53:59

标签: c printf scanf

在运行scanf之后,

printf输出正被“\ n”压缩。我正在尝试使用。

scanf ("%*c");

选择“\ n”,但它不起作用......这里是代码

    printf("Enter char float int char:", char4, deci2, num2, char5);
    scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);
    scanf ("%*c");
    printf("You entered: '%c' %.3f %d '%c' " ,char4 ,deci2, num2, char5 );

并输出到

    Enter char int char float:a 5 a 5.5
    You entered: 'a' 5 'a' 5.500 
    Enter char float int char:a 5.5 6 b
    You entered: '
    ' 0.000 0 ''

3 个答案:

答案 0 :(得分:3)

在这一行:

printf("Enter char float int char:", char4, deci2, num2, char5);

删除char4deci2num2char5。如果您仍然看到Carl Norum建议的问题,那么请尝试使用第一个scanf留下的换行符:

scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);
getchar();
printf("You entered: '%c' %.3f %d '%c' " ,char4 ,deci2, num2, char5 );

答案 1 :(得分:3)

该行

scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);

正在从之前的scanf调用中获取输入缓冲区中剩余的迷路换行符。您可以通过在第一个%c

前面放置一个空格来解决这个问题
scanf (" %c %f %d %c", &char4, &deci2, &num2, &char5);

这将告诉scanf在读取下一个非空格字符之前跳过任何前导空格(空格,换行符,制表符等)。

该行

printf("Enter char float int char:", char4, deci2, num2, char5);

有点令人头疼;它不会导致任何问题(多余的参数被评估,但在其他方面被忽略),但它看起来不对,并表示有些混乱。

答案 2 :(得分:2)

这是第一次读取缓冲区中剩余的\n仍在闲逛。你需要在之前吃那个做第二个scanf,而不是之后。

编辑说明:您应该在问题中包含所有相关代码,而不仅仅是一个子集。我只能从你提供的输出中推断出这是你的问题。它包含您的示例代码中不存在的字符串Enter char int char float