在修改学生学号时会一直出现将学号修改为……
不能跳出来,怎样解决这个问题,使输入的学号不是已存在的,再继续执行其他的
你这话有点没明白
#include <stdio.h>
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a','b','c', };
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
运行结果
!!!我自认为我的程序没问题,没有报错,没有error,但是运行结果就是这样的不靠谱,说了太多废话,现在来说怎么解决的
我用的编译环境是vs2019
首先将鼠标光标分别放在arr1,arr2处,如下图
arr1后面的[]内容是4,代表arr1有四个元素;arr2后面的[]内容是3,代表arr2有三个元素。可是arr1明明只有三个元素,哪来的四个?实际上arr1中的元素有‘a','b','c','\0'."\0"的值为0,代表字符串结束的标志。所以arr1打印出来的结果是abc。arr2放是'a','b','c'.'c'后的值不确定,也没有字符串结束的标志,所以,打印出abc之后打印出阿来的就是烫烫烫之类的。如果我们主动给他放一个字符串结束标志'\0'进去,相当于我们给它增加一个结束标志,打印出来的结果就是和arr1一样啦
敲黑板啦!!!!
注:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算做字符串内容。
修改后的程序:
#include <stdio.h>
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a','b','c',0 };
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
修改后的运行结果:
顺便贴一下今天的学习笔记,大家每天都要加油啊,感谢观看。希望网友们可以不吝赐教,多多批评指正。
这段里这样写,供参考:
while (a) // 这里为什么是 while(a) ?
{
switch (a)
{
case 1:
int flg = 0;
printf("将%d学生的学号修改为:", num);
do {
scanf("%d", &upd_stu.studentID);
for (j = 0, flg = 1;flg && j < stu_num; j++)
if (upd_stu.studentID != num && stu[j].studentID == upd_stu.studentID)
{ //如果输入的是原学号,被允许
printf("您修改的学号已存在,请重新输入:");
flg = 0;
}
if (flg) {
stu[i].studentID = upd_stu.studentID;
break;
}
} while(1);
break;
case 2:
//...
break;
}