扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你定义了一个指针,初始化为null,然后你读取z里面的内容,来进行大小比较,0地址是正常程序无法访问地址,引发内存访问异常,抛出导致printf没执行,我猜测你肯定使用了异常处理,直接忽略异常,导致你没有发现错误。
创新互联建站主营南开网站建设的网络公司,主营网站建设方案,App定制开发,南开h5小程序开发搭建,南开网站营销推广欢迎南开等地区企业咨询
那是因为你读入单个字符的方式不对,纯粹的scanf(%c),或者getchar()都会把你上一次输入的回车符(\n)读入了。然后你就读入了一个回车符。正确的方式是读入到一个字符串,再取字符串首位。
因为vc6不支持这些符号的输出,唯一支持的是ascll码上那些符号。你去找找ascll码看看你想要的符号如果没有就无法输出。
因为回车就是一个字符,你输入完数字按回车的时候就已经输入字符了。
这句输入,你输入完后会敲一下回车键,表示你输入的结束,这个回车键会留在输入缓冲区内,当你使用a=getchar();是,他发现缓冲区内有字符,也就是那个回车键,他会在动将回车键赋给a,所以才出现跳过的现象。
C语言里的gets()函数功能是从输入缓存中读取多个字符,遇到回车符时,结束输入。
因为你之前输入的时候结尾用的都是回车所以这个回车字符被输入到 gets()中了。最好的方法就是清空缓存,调用fflush()清空缓存,在调用gets()前清空缓存就行了。
用 fgets( book[i].bn, 100, stdin);这种形式输入。回车换行符就会含在字符串里,输入不会读乱。读入的字符串长度等于 strlen(book[i].bn);最后一个字符是 \n把它赋成 \0 就从字符串里清除了。
估计是在调用Creat函数之前输入缓冲区没有清空。
执行了,它把执行scanf(%d,&n);时遗留在缓冲区中的回车符收走了;gets函数以回车符为结束命令,所以它以为你已经输入完毕了。解决办法很多,但正宗的是在gets前面加一句fflush(stdin);把缓冲区清空。
你猜的没错,是会多出一个回车的,因为scanf_s(%d,&i);只获取了输入流中的整数,跳到第一个gets函数时,它会获得之前剩下的回车,如果输入流为空,那么它会等待用户输入。
1、“MGraph G;”没有初始化。建议做一下修改:void InitGraph(MGraph& G)//创建一个函数用来生成G图 { int i,j;G.vexnum=4;...// 其他同,把 return G;去掉。
2、如果调用函数写在主函数之后。那就要主函数声明了。
3、那是因为你的程序根本就没有写对 比如:老师让你输出:1 你写个程序输出:2 你的代码当然编译不会出错。而且可以很好的运行,但是结果就是永远都不会是1,因为你就让他输出的2,结果怎么会是1呢。
4、让函数返回结构体变量;再把datas前的*删除,让它成为一个Data型变量;主函数中把myData前的*删除,让它也成为一个结构体变量,把主函数中的printf中的两个-改成两个.就可以了。希望对你有帮助。
1、scanf(%d %s %f %f ,&(p+i)-num,(p+i)-name,&(p+i)-score1,&(p+i)-score2,&(p+i)-score3);//这段代码里面从键盘只读取了4个值,却要赋值给5个成员,少了一个%f。
2、scanf(%d%*c,&n);就行了。 这里%*c的意思是读入一个字符(也就是回车),但是不保存到任何变量里。
3、这个是本身编译软件的问题,也不算是属于BUG。那是由于上一个输入输入的函数最后判断输入完毕的回车会在这里生效,而且你写getchar函数也会一同运行,解决办法就是写两个getchar。
4、不会的跳过去的。如果出现跳过现象,仔细检查你的程序,找一找哪里有bug,修复就好了。
5、默认的要去找相关模块的符号文件。这个符号文件用于调试,一般编程不需要。看情况你的代码是正常退出了。问题就出现在scanf上。建议你不要使用这个函数,在循环输入时使用它不行。用gets就好了 。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流