joy2008yh
joy2008yh
采纳率100%
2015-10-23 10:59 阅读 3.9k
已采纳

C语言scanf读取单个字符出错

{
char a;
scanf_s("%c", &a);
printf("%c", a);
}
编译报warning:
警告 C4477 'scanf_s' : format string '%d' requires an argument of type 'int *', but variadic argument 1 has type 'char *'

并且得不到正确的结果。

使用getchar()没有问题,求问scanf的用法到底是怎样

谢了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • 已采纳
    rl529014 好儿郎-志在四方 2015-10-23 11:40

    需要一个参数指定缓冲区长度,
    例如:char name;
    scanf_s("%s", name, sizeof(name));

    点赞 1 评论 复制链接分享
  • rl529014 好儿郎-志在四方 2015-10-23 11:02

    改成scanf("%c", &a);就OK了

    点赞 1 评论 复制链接分享
  • rl529014 好儿郎-志在四方 2015-10-23 11:38

    int _tmain(int argc, _TCHAR* argv[])
    {

        char a;
        scanf_s("%c",&a,sizeof(char));
        printf("%c\n",a);
        getchar();
    return 0;
    

    }

    点赞 1 评论 复制链接分享
  • rl529014 好儿郎-志在四方 2015-10-23 11:42

    微软把这函数的用法改的越来越蛋疼了,

    点赞 评论 复制链接分享
  • qq_16558621 Young卡卡 2015-10-23 12:01

    微软平台的 所谓安全的scanf_s

    点赞 评论 复制链接分享
  • u011421236 人生是电视剧你是广告 2015-10-23 14:37

    scanf_s最后一个参数是缓冲区的大小,表示最多读取n-1个字符.

    vc++2005/2008中提供了scanf_s(),在最新的VS2015中也提供了scanf_s()。在调用时,必须提供一个数字以表明最多读取多少位字符。

    例子如下:

    int i, result;

    float fp; char c, s[81];

    wchar_t wc, ws[81];

    result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1, &wc, 1, s, 80, ws, 80 );

    点赞 评论 复制链接分享

相关推荐