


如图,为什么会出现我没有输入过的内容,而且循环无法结束,为什么未输入部分的内容不为空,要如何修改
关注引自免费微信小程序:皆我百晓生
从你提供的代码片段来看,有几个潜在的问题可能会导致循环无法结束以及输出了未经输入的数据。首先,让我们逐个解决这些问题。
在你提供的代码中,循环似乎是在 for 循环里,具体如下:
for(int i=0;i<10;i++){
if(p->linjians[i].cliaoname!='\0'){
cout << p->linjians[i].cliaoname << "数量" << p->linjians[i].sum << endl;
}
}
这里循环无法结束可能是因为数组 linjians 的元素未被正确初始化,即某些元素的 cliaoname 字段可能未被设置为 '\0' 来表示字符串的结束,从而导致循环一直检查到数组的末尾。为了避免这种情况,你应该确保在初始化或使用这些结构体时,将所有未使用的字段设置为默认值。
在创建或重置 Machin 结构体实例时,显式初始化其 linjians 数组中的每一个 cliaoname 字段为 '\0',并将其 sum 字段设置为 0 或其他合适的默认值。
输出了未经输入的数据通常意味着数据结构中存储了之前操作留下的残留数据。这可能是由于你没有在每次操作后正确清除或重置数据结构导致的。
在每次使用数据结构之前,确保对其进行适当的初始化或重置。例如,在读取新数据前,清空结构体中的数组或字段。
下面是一个针对上述问题的修改示例,注意这里假设 Machin 结构体的定义允许我们这样初始化:
struct Machin {
char name[20];
int A11Num;
struct Linjian linjians[10]; // 假设 Linjian 是一个包含 cliaoname 和 sum 的结构体
};
// 初始化 Machin 结构体
void initMachin(Machin &m) {
m.A11Num = 0;
strcpy(m.name, "");
for(int i = 0; i < 10; i++) {
m.linjians[i].cliaoname[0] = '\0'; // 确保字符串以 '\0' 结尾
m.linjians[i].sum = 0;
}
}
// 使用示例
int main() {
Machin p;
initMachin(p); // 初始化 p
// 其他代码...
for(int i = 0; i < 10; i++) {
if(p.linjians[i].cliaoname[0] != '\0') { // 检查是否非空
cout << p.linjians[i].cliaoname << "数量" << p.linjians[i].sum << endl;
}
}
return 0;
}
通过以上修改,可以确保在读取数据前,所有数据结构都已重置,避免了输出未经输入的数据,并确保循环在遇到空数据时能正确终止。