一个字符变量存储到动态分配内存引发的输入问题解决--连续输入scanf函数存在缓冲区的问题
2014-05-10 13:27
661 查看
运用 malloc 开辟内存对字符串输入进行存储,为什么输出不是输入的呢?改成整形变量就行了呢
RT
![](http://img.blog.csdn.net/20140510132520515?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDM2OTIzNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
出现这样的错误。
解决办法:
当用scanf函数输入数据时,会在键盘缓冲区留下一个换行符,下面再用scanf读取字符时,必然会先读取这个垃圾换行符。
解决方法是在scanf函数后面,直接添加一个getchar();这样就可以消灭掉scanf函数所遗留的垃圾换行符。
我在3楼已经把修改的程序写出来了,你考虑一下红笔标的地方。
RT
#include <stdio.h> #include <stdlib.h> void main() { int r,c;int i,j; char *p; printf("请输入地图的行数和列数,空格隔开:\t"); scanf("%d%d",&r,&c); printf("请输入%d行%d列的地图:\n",r,c); p=(char *)malloc(sizeof(char)*r*c); for(i=0;i<r;i++) { for(j=0;j<c;j++) { scanf("%c",(p+c*i+j)); } } for(i=0;i<r;i++) { for(j=0;j<c;j++) { printf("%c\t",*(p+c*i+j)); } printf("\n"); } }
出现这样的错误。
解决办法:
当用scanf函数输入数据时,会在键盘缓冲区留下一个换行符,下面再用scanf读取字符时,必然会先读取这个垃圾换行符。
解决方法是在scanf函数后面,直接添加一个getchar();这样就可以消灭掉scanf函数所遗留的垃圾换行符。
我在3楼已经把修改的程序写出来了,你考虑一下红笔标的地方。
如果你是一行一换行的话。可以试一试下面:(特别注意输入时字符之间不能有分隔符) #include <stdio.h> #include <stdlib.h> void main() { int r,c;int i,j; char *p; printf("请输入地图的行数和列数,空格隔开:\t"); scanf("%d%d",&r,&c);getchar(); ---------此getchar(); 是为了消除前面scanf("%d%d",&r,&c);输入时留下的换行符! printf("请输入%d行%d列的地图:\n",r,c); p=(char *)malloc(sizeof(char)*r*c); for(i=0;i<r;i++) { for(j=0;j<c;j++) { scanf("%c",(p+c*i+j)); } getchar(); //----------如果连续输入的话,去掉这个 getchar(); } for(i=0;i<r;i++) { for(j=0;j<c;j++) { printf("%c\t",*(p+c*i+j)); } printf("\n"); } }
相关文章推荐
- scanf()函数连续输入数字,字符引发的小问题
- 关于用连续用多个scanf函数输入数据时前面的scanf函数会在缓冲区留下回车符的问题
- scanf_s()函数—帮你解决带有空格的字符串的输入问题
- 一、 找出函数中存在的问题。以下题目均在Lab05项目中完成。2、 找出项目中存在的缺陷,并给出解决的方案(至少3个,不包含下面那个举例)。 说明:这里所说的缺陷不一定都是错误,而是明显需要改进的地方。 如:不可以无限输入密码,容易被暴力破解,存在安全隐患。
- 对一个字符数组连续用gets函数出现的问题(缓冲区内容补充)
- 徐登沿的第八个程序(scanf()函数的%c格式符存在问题的解决方法)
- C语言scanf函数输入时键盘缓冲区\n的问题[经典问题]
- C语言scanf函数输入时键盘缓冲区\n的问题
- C语言scanf函数输入时键盘缓冲区\n的问题[经典问题]
- 习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按下回车键时会产生换行符(/n)
- C语言中scanf函数与输入缓冲区之间的关系
- 解决xml中&符号"&amp;"输入问题的一个思路
- 解决js函数replace禁止输入框输入非法字符,光标回到文字最后问题
- JQuery ajax 如何设置同步调用(同时只能触发一个函数) 解决与层显示信息时候的冲突问题
- 编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。 程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。 请使用3个数组处理函数来分别进行输入、显示和计算
- js函数在window.location.href跳转页面传参由于空格引发的一个小问题
- 深入解析scanf()/getchar()和gets()等函数针对字符串输入的问题
- 解决scanf接收多余回车字符问题--清空缓冲区
- 解决c语言中调用scanf()或者strcpy()函数报错问题