本文目录
- 将整数和字符一起用scanf输入时为什么会报错
- 关于scanf报错程序为什么ret!=2就错了,难道scanf没出错,返回值就是2吗
- c语言scanf函数判断输入的数超过多少时报错
- char *a = 0; scanf_s(“%s“, a); 为什么会报错
- scanf(“%f“,a),出错了注释掉就不报错
- c语言scanf_s报错0xC0000005(Visual Stdio 2017)
将整数和字符一起用scanf输入时为什么会报错
这是因为你输入的3和g之间有一个空格, 而空格是可以被当成字符的. 所以打印ch时就打印了一个空格.空格可以用来分开连续的两个整数的输入, 但中间有字符类型输入的话, 不适用空格分隔, 你可以直接输入连续的 3g6, 就会得到你要的结果.或者改成 scanf("%d %c %d", &i, &ch, &j);这样就可以输入 3 g 6
关于scanf报错程序为什么ret!=2就错了,难道scanf没出错,返回值就是2吗
不是,scanf()函数会返回输入的数据个数,比如ret = scanf("%d",&a);你输入了123回车,ret 这时为1.作者是怕你的输入没有按程序要求来,比如他要求两个,你只输入了一个数据就结束了,那么明显是输入错误,他判断出来然后打印 input error!
c语言scanf函数判断输入的数超过多少时报错
int scanf( const char *format, ... );
scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为: scanf("《格式化字符串》",《地址表》);
scanf("%d-%d-%d",year,month,day),
如果year,month,day都被成功读入,那么scanf的返回值就是2
如果只有一个或者两个被成功读入,返回值为1
如果一个都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
且返回值为int型.
#include《stdio.h》int main(){ int year,month,day; scanf("%d-%d-%d",&year,&month,&day); printf("%d-%d-%d",year,month,day); return 0;}
注意这里scanf("%d-%d-%d",&year,&month,&day);必须为地址所以之前你的那个
scanf("%d-%d-%d",year,month,day),是不对的。
按照你说的再控制台输入2013-9-9-9按回车后,最后的-9会被舍弃直接将2013保存到year中,
9保存到month中,9保存到day中。如果要判断输入的不是2013-9-9是报错的话,你可以这样子写。
#include《stdio.h》int main(){ int year,month,day;if (scanf("%d-%d-%d",&year,&month,&day)!=1){ printf("%d-%d-%d",year,month,day);}else{ printf("数据读入出错!");} return 0;}
你输入10按回车就报错。
满意后给采纳哦,谢谢!
char *a = 0; scanf_s(“%s“, a); 为什么会报错
因为这里只是定义了一个指针变量,并且初始化为一个空指针。而并没有给这个指针变量赋值一个可用空间的首地址,所以在下面的输入语句中要读取一个字符串并存储到这个指针所指地址开始的空间,也就是说,想把一个字符串存储到一个空地址上所以就是出错了。正确的做法是,在输入语句之前,先要让变量a指向一个可使用的存储区域的首地址,比方说一个字符数组的首地址。
scanf(“%f“,a),出错了注释掉就不报错
这是因为scanf("%f",a);当中这个格式输入函数,变量应该要取变量的地址,而不是直接以变量名写入的。把其中的a改成为&a就可以了:scanf("%f",&a);就不用把它注释掉了。
c语言scanf_s报错0xC0000005(Visual Stdio 2017)
怀疑的很正确,scanf_s用错了.
只有 %c和%s要加额外参数,表示最大输入字符数量. 其他不用加.
所以
scanf_s("%d%c%d", &a, &op, &b, 3);
这个正确的写法是
scanf_s("%d%c%d", &a, &op, 1,&b);