0

在我运行 scanf 之后,printf 的输出被 "\n" 破坏了。我正在尝试使用。

scanf ("%*c");

chomp "\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 ''
4

3 回答 3

3

在这一行:

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

删除char4, deci2,num2char5. 如果您仍然看到 Carl Norum 建议的问题,请尝试使用第一个 scanf 留下的换行符,如下所示:

scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);
getchar();
printf("You entered: '%c' %.3f %d '%c' " ,char4 ,deci2, num2, char5 );
于 2013-01-25T21:55:46.477 回答
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);

有点让人头疼;它不会引起任何问题(多余的参数被评估,但在其他方面被忽略),但它看起来是错误的,并表明一些混乱。

于 2013-01-25T22:07:23.770 回答
2

它是您第一次\n读取时缓冲区中的剩余部分仍然存在。你需要在做第二个之前吃那个,而不是之后。 scanf

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

于 2013-01-25T21:58:14.927 回答