【问题标题】:Magic of scanf() function?scanf() 函数的魔力?
【发布时间】:2010-06-04 10:57:32
【问题描述】:

为什么要运行这段代码并打印整个字符串?

#include <stdio.h>

void main()
{
    int a;
    while(a!='q')
    {
        scanf("%c",&a);
        printf("%c",a);
    }
}

输入除q以外的字符串,最后按回车键。只有现在您的字符串才会打印在屏幕上。为什么?

【问题讨论】:

  • 我无法理解您的问题。
  • main 不返回 void; main 返回一个 int。
  • 你能解释一下你的评论 iconik
  • @Govind,你使用 void main()。这是不正确的。 Main 返回一个 int,因此: int main()
  • 确实如此。 main 是一个特殊函数,因为它会在您的程序启动时自动调用。它被一些期望int 作为回报的东西调用。所以你也应该有return EXIT_SUCCESS;

标签: c input scanf


【解决方案1】:

这里的问题不在于 scanf,而在于您的 printf 调用。

Printf 缓冲输出直到到达新的一行,所以程序在你printf("\n"); 之前不会显示任何内容。 (当有人按下回车键时也会发生这种情况,您将他们的返回输出到屏幕导致缓冲区刷新。)

如果您不想使用printf("\n") 拆分输出,则可以使用fflush(stdout) 手动刷新缓冲区而不打印任何内容,如下所示:

int a;
while(a!='q')
{
    scanf("%c",&a);
    printf("%c",a);
    fflush(stdout);
}

【讨论】:

  • 修复它,我复制了原始问题中的错字。
  • 可能想要再次编辑问题中的代码并重新设置样式。请问?
【解决方案2】:

对于初学者来说,该代码无法编译 - print 不是 C 中的函数,printf 是您要查找的函数。

至于我想你在问什么,我不知道你为什么要打印你读到的每一个字符,直到你读到 q;好像没什么意义。

【讨论】:

    【解决方案3】:

    首先你需要将 a 定义为 char 类型:

    char a;
    

    当你按下回车键时,while 循环会运行你输入的字符数。试试这个看看发生了什么:

    char a = 0;
    int i = 0;
    while(a!='q')
    {
        scanf("%c",&a);
        printf("%d:%c",i++,a);
    }
    

    【讨论】:

    • 也可以使用 int yar(Friend)
    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多