问题描述
- 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的用法到底是怎样
谢了
解决方案
需要一个参数指定缓冲区长度,
例如:char name;
scanf_s("%s", name, sizeof(name));
解决方案二:
改成scanf("%c", &a);就OK了
解决方案三:
int _tmain(int argc, _TCHAR* argv[])
{
char a;
scanf_s("%c",&a,sizeof(char));
printf("%cn",a);
getchar();
return 0;
}
解决方案四:
微软把这函数的用法改的越来越蛋疼了,
解决方案五:
微软平台的 所谓安全的scanf_s
解决方案六:
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 );
时间: 2024-08-08 02:07:13