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

问题描述

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

c语言-C语言scanf读取单个字符出错的相关文章

c 指针-C语言 结构体指针字符 二进制文件写入和读取 指针字符输出错误

问题描述 C语言 结构体指针字符 二进制文件写入和读取 指针字符输出错误 typedef struct s{ char *name; }student; /*将结构体读出并显示*/ int IsUsed(char str) { FILE *fp = fopen("test","rb"); student s; s.name = (char) malloc(sizeof(char)*20); fread(&s,sizeof(student),1,fp); wh

C++编程中用put输出单个字符和cin输入流的用法_C 语言

用C++流成员函数put输出单个字符 在程序中一般用cout和插入运算符"<<"实现输出,cout流在内存中有相应的缓冲区.有时用户还有特殊的输出要求,例如只输出一个字符.ostream类除了提供上面介绍过的用于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put.如: cout.put('a'); 调用该函数的结果是在屏幕上显示一个字符a.put函数的参数可以是字符或字符的ASCII代码(也可以是一个整型表达式).如 cout.put(65 + 32); 也显

c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求

问题描述 c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求 #include #include int main() { char*s; scanf("%s",s); //printf("%sn",s); //int n = strlen(s); //printf("%dn",n); char ret[56]; return 0; } 解决方案 s只是指针变量,没有分配内存 char*s; s = mall

测试-C语言getchar()为什么无法读取ungetch()返回的缓存字符

问题描述 C语言getchar()为什么无法读取ungetch()返回的缓存字符 在看K&R的逆波兰算法,发现里面用getch,把它改成getchar后发现无法读取ungetch返回缓冲区的字符而是直接读取下一个字符了.测试了一下 main() { int a,b,c; a=getchar(); ungetch(a); putchar(getchar()); while(1); } 输入23后发现返回的是3. ungetch返回的不是缓存吗,怎么读取不了呢? 解决方案 看了这段代码,深深地感觉自

printf-(c语言)利用%ld读取double类型,程序可以运行,但是结果是很大的负数?

问题描述 (c语言)利用%ld读取double类型,程序可以运行,但是结果是很大的负数? #include #define TAX_1 17850 #define TAX_2 23900 #define TAX_3 29750 #define TAX_4 14875 #define TAXRATE_1 0.15 #define TAXRATE_2 0.28 int main(void) { double taxsalary,taxpay; int n; printf("Please enter

文件操作-c语言实现txt文件读取

问题描述 c语言实现txt文件读取 VC编译器下c语言没有办法打开TXT文件.代码如下:#include #includevoid main() { FILE *fp; if((fp=fopen(""C:UsersAdministratorDesktopad.txt""r""))==NULL) { printf(""cannot open the file!""); exit(0); } else prin

指针-C语言程序用fputc函数写入字符到建立的文件中,程序运行正常,可是资源管理器里找不到建立的新文件?

问题描述 C语言程序用fputc函数写入字符到建立的文件中,程序运行正常,可是资源管理器里找不到建立的新文件? //怎样向文件读写字符 #include #include int main() { FILE * fp;//定义指向文件的指针 char ch,filename[10];//ch代表输入的字符变量,filename代表文件名 printf("请输入所用的文件名:"); scanf("%s",filename);//输入文件名 if((fp = fopen

指针-为何c语言中会出现读取位置时发生访问冲突

问题描述 为何c语言中会出现读取位置时发生访问冲突 我是写字符串检索.但是如果把jiansuo()这个函数中第二个if(cha(p2)==(p3-p2+1))的话就没问题了.也就是说后边不能==i,如果是i的话,就出错-- #include int cha(char *p1) { int num=0; for (char *p = p1; *p!= ''; p++) { num++; } return num; } void jiansuo(char *p1,char *p2) { for (c

printf-c语言一个关于scanf的问题

问题描述 c语言一个关于scanf的问题 代码一 scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/ scanf("%d",&y); /*若此时输入的是字母而不是数字,比如输入"s"并回车*/ /*那么变量y将不会接收到任何字符或数字,其值保持原样,不发生任何改变*/ scanf("%c",&a); 请问代码一中的s为什么会被a接收?输入的是字母而不是数字的话,