scanf_s()读入字符有问题

Asskicker_Ryan 2014-12-04 11:12:22
#include <stdio.h>
int main(void)
{
char c1, c2;

scanf_s("%c,%c", &c1, &c2); //想不通啊 我这边写得有问题吗?为什么debug的时候会报内存错误?
printf("%c%c", c1, c2);

getchar();
getchar();
return 0;
}

CSDN发帖不知道为什么图片老是传不上来。。。
调试的时候我输入了A,a 然后就报内存错误了,看VS里的局部变量监控可以看到对c1(65'A')赋值是成功的,而c2里面是-52‘?'。
这是报错信息:Unhandled exception at 0x5157D6AC (msvcr120d.dll) in Home.exe: 0xC0000005: Access violation writing location 0x00000000.
...全文
3822 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
清怨 2015-12-11
  • 打赏
  • 举报
回复
当scanf_s()读取字符时, 在字符变量前要加一个作为大小的数字参数, 当接收数值时, 不用加这个参数, 比如:
double number1 = 0.0;
	double number2 = 0.0;
	char operation = 0;

	printf_s("\nEnter the calculation\n");
	scanf_s("%lf %c %lf", &number1, &operation, 1, &number2);
赵4老师 2014-12-04
  • 打赏
  • 举报
回复
在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。
Asskicker_Ryan 2014-12-04
  • 打赏
  • 举报
回复
谢谢楼上两位,我再翻了一下MSDN文档,改成scanf_s("%c,%c", &c1, 1, &c2, 1);就没问题了。。 之前把两个指定缓冲区大小的参数写在最后了,事实上应该紧跟前面的指针参数。
「已注销」 2014-12-04
  • 打赏
  • 举报
回复
在调用时,必须提供一个数字以表明最多读取多少位字符。
Asskicker_Ryan 2014-12-04
  • 打赏
  • 举报
回复 1
引用 1 楼 turingo 的回复:
scanf_s需要多传一个参数,例如:scanf_s("%c,%c", &c1, &c2,32);
额,原来又是这个问题啊,之前我就碰到过要读入一个字符串到char[]数组中,知道上有人告诉我说要在后面再传一个表示字符串长度的参数。没想到对单个字符读入现在也有这个规定。。。 scanf_s("%c,%c", &c1, &c2, 32); 但是我按你说的改了还是不行。。。
Asskicker_Ryan 2014-12-04
  • 打赏
  • 举报
回复
而后我改成 scanf_s("%c", &c1); printf("%c", c1); 只读入一个字符也有问题,编译器没有报错,但是当我输入一个A按下回车后,我看到的输出只有一个空格。。。 我再用c1 = getchar(); c2 = getchar(); 分别读入后再printf("%c%c", c1, c2);输出,这次倒没有问题了。。。到底是为什么啊??
图灵狗 2014-12-04
  • 打赏
  • 举报
回复
scanf_s需要多传一个参数,例如:scanf_s("%c,%c", &c1, &c2,32);

70,018

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧