【问题标题】:I cannot print characters to the screen using printf我无法使用 printf 将字符打印到屏幕上
【发布时间】:2016-07-02 22:40:18
【问题描述】:

我正在使用 Microsoft Visual Studio Express 2013,由于某些奇怪的原因,我无法使用 printf 将字符打印到显示器上。我一直在运行测试代码,它当然不允许我打印字符。我能够很好地将整数打印到屏幕上。我以前从未遇到过这样的问题。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char item;

    printf("Test character # 1: ");
    scanf_s("%c", &item);
    printf("Test character entered = %c\n\n", item);


    return (0);

}

输出很简单:

Test character entered = 

无论如何它只是显示一个空白。

我尝试过使用fflush(stdout),但这没关系。

有没有人对我接下来要尝试什么有什么建议?我想我会尝试在我的 Mac 上运行它,以确保我没有做错什么。另外,我会尝试让printf 使用%s 打印一个字符串,看看是否可行。

非常感谢任何建议。谢谢!!

【问题讨论】:

  • 更新:我确实尝试使用 %s 打印一个字符串,它工作得很好。所以这个问题只限于 printf 中使用 %c 的字符。我想知道 scanf_s() 函数是否有问题?这是我第一次使用该函数,事实上,微软声称如果我尝试使用 scanf() 是一个错误,它不会让我编译我的代码。
  • %c%sscanf_s 需要大小。例如scanf_s("%c", &amp;item, 1);

标签: c


【解决方案1】:

根据 Microsoft 文档:https://msdn.microsoft.com/en-us/library/w40768et.aspxscanf_s(),需要 c、C、s、S 的所有输入参数的缓冲区大小。尝试将代码更改为:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char item;

    printf("Test character # 1: ");
    scanf_s("%c", &item, 1);
    printf("Test character entered = %c\n\n", item);


    return (0);

}

【讨论】:

  • @BLUEPIXY 文档说:“与 scanf 和 wscanf 不同,scanf_s 和 wscanf_s 需要为所有类型 c、C、s、S 或字符串控制集的输入参数指定缓冲区大小括在 [] 中。”感谢您指出这一点。
  • 这解决了!我现在试图不对微软感到沮丧,但我很失望微软宣布 scanf() 是一个错误并声明我必须使用 scanf_s,但它改变了 scanf 多年来一直工作的方式。好吧,抱怨够了 :) 对不起。
  • 我还想补充一点,当您使用 scanf_s 而不声明整数的缓冲区大小时,它工作得很好!它似乎只需要为非整数项声明的缓冲区大小。
猜你喜欢
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2014-09-21
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多