2301_79712304 2024-06-18 02:32 采纳率: 88.9%
浏览 1
已结题

为什么循环无法结束,且内容不符

img

img

img


如图,为什么会出现我没有输入过的内容,而且循环无法结束,为什么未输入部分的内容不为空,要如何修改

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-18 02:33
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的代码片段来看,有几个潜在的问题可能会导致循环无法结束以及输出了未经输入的数据。首先,让我们逐个解决这些问题。

    循环无法结束的原因分析与修正

    在你提供的代码中,循环似乎是在 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;
    }
    

    通过以上修改,可以确保在读取数据前,所有数据结构都已重置,避免了输出未经输入的数据,并确保循环在遇到空数据时能正确终止。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 创建了问题 6月18日