【问题标题】:printf ouput is being destroyed by a "\n" after scanfprintf 输出在 scanf 之后被“\n”破坏
【发布时间】:2013-01-25 21:53:58
【问题描述】:

在我运行 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 ''

【问题讨论】:

  • 你想做什么:printf("Enter char float int char:", char4, deci2, num2, char5);?

标签: c printf scanf


【解决方案1】:

线

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

正在从您之前的@​​987654322@ 调用中拾取输入缓冲区中留下的杂散换行符。您可以通过在第一个 %c 前面放置一个空格来解决此问题:

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

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

线

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

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

【讨论】:

    【解决方案2】:

    在这一行:

    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 );
    

    【讨论】:

    • 那行代码是错误的,但我认为不是 OP 的问题。
    • @CarlNorum - 我快速检查了一下,更改后代码对我有用。然而,问题可能不止一个。
    • @Mike,那是因为他没有提供足够的代码。如果你把这些东西留在里面,它对你的工作方式完全一样。删除这些不会改变大多数编译器的任何行为(尽管从技术上讲,它确实会导致未定义的行为)。
    • 哎呀。哈哈。静静地喝完我的咖啡。谢谢你。仍然得到 `You enter: ' ' 0.000 0 ''1` 作为输出。
    • @user1787331,那是因为这个答案是错误的,尽管获得了 4 个赞。
    【解决方案3】:

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

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

    【讨论】:

    • 当我看到printf("Enter char float int char:", char4, deci2, num2, char5); 我不再看代码了:D
    • 当然,这不好,但不太可能引起问题。
    • @MarounMaroun 当我阅读此评论时,我不再查看我的代码,而是开始寻找我的咖啡!
    • +1 表示注意 - You should really include all of the relevant code
    • 谢谢。这有助于我了解问题出在哪里。
    猜你喜欢
    • 2020-12-28
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2019-01-27
    • 2020-07-15
    • 2012-11-24
    相关资源
    最近更新 更多