C语言编程问题分析,以及错误解决方法 | 您所在的位置:网站首页 › 编程模拟过程中出现的问题及解决方法有哪些 › C语言编程问题分析,以及错误解决方法 |
大家新年好呀,过年这段时间太忙了,一直没有写文章,这两天才想起来应该搞搞学习了,就把年前写的atm项目中遇到的一些问题整理出来,供需要的人参考学习,也供自己回顾温习。 一开始学习C语言时,对void*这个类型没有过多的了解与关注,只知道是“没有类型的指针”,没有用过,在写atm这个项目的时候,才真正去了解它。
遇到 C/C++程序运行时提示“读取/写入位置发生访问冲突”。产生原因:一般都是由于发生异常处的代码中,涉及到数据的读取或写入,并且访问数据时使用的是指针,而该指针并未得到合适的初始化,导致其所指向内存为NULL。解决方法: 写入冲突:初始化变量;读取冲突:输出类型写正确; while循环中有Switch,如何跳出while循环 while循环用boolean变量控制switch中的break只能终止switch循环,无法终止while循环,如果将break改为return,虽然能终止循环,但是也会用力过猛,整个方法都会终止。如何做到精确的终止掉当前while循环,我们可以在外面定义一个boolean变量flag来控制while循环,通过改变flag的值来控制while循环。如下是atm系统中“修改用户信息”函数的部分代码: //修改用户信息 void updateInfo(){ int i=0; int flag = 1; Customer *user = (Customer*)getData(hashmap,custCurrent->accountCard); while(flag){ scanf("%d",&i); switch(i){ case 1:printf("请输入账户名称:\n");scanf("%s", &user->accountName);break; case 2:printf("请输入电话号码:\n");scanf("%s", &user->mobile);break; case 3:printf("请输入要修改的密码:\n");scanf("%s", &user->password);break; case 0:flag = 0;break; default:printf("输入有误,请输入对应的值"); } } printf("修改用户信息成功! "); return; }在修改用户信息函数中,一开始我并没有使用flag变量,导致循环总是出现提前终止或陷入死循环的问题,后面巧妙的使用了一个flag变量去控制循环的终止就可以完美的实现啦。 static关键字 修饰局部变量使用static修饰的局部变量不会在函数重新进入时再次赋初值,不会在函数结束时而释放(存储在全局区),也不会在循环中多次赋初值。这种变量的作用域为局部作用域,当定义它的函数结束时,其作用域随之结束。使用static修饰的局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。 修饰全局变量使用static修饰的全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者相互不影响。在定义不需要与其他文件共享全局变量时,加上static关键字能够有效地降低程序模块化之间的耦合,避免不同文件同名变量的冲突,且不会误使用。 修饰函数使用static修饰的函数只能在本文件中调用,不能在其他文件中调用。这种函数没有this指针,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数。出现在类体外的函数定义不能指定关键字static。 |
CopyRight 2018-2019 实验室设备网 版权所有 |