0

我迷失了试图找出运行时错误。我有一个 struct 数据类型,并在 array 中实现了它items[]。在结构中,有一个char name定义。我还在使用 cin 将用户输入读取到char数据类型中。

i=0;
do {
printf("%c\n", items[i].name);
printf("%c\n", itemname);

//if ( items[i].name == itemname ) 
//found=true;
i++;
} while (i<numofitems || found);

如果我取消注释 if 语句,printf("%c\n", itemname);似乎会运行数千次,然后是Bus error: 10. 请注意,numofitems 目前只有 5 个。

当前编写方式的输出:

A
C
B
C
C
C
D
C
E
C

知道为什么我不能简单地比较一个字符是否等同于另一个字符吗?

4

4 回答 4

4

你的情况应该是i<numofitems && !found。现在,如果其中任何一个为真,它就会继续循环,并found在第三次迭代时变为真。

我将其重写为:

for (int i = 0; i <numitems; ++i)
    std::cout << items[i].name << '\n';
    std::cout << itemname << '\n';

    if ( items[i].name == itemname ) 
        break;
}
于 2013-04-05T00:57:27.363 回答
2

正如@chris 所提到的,您的终止条件看起来是错误的。如果将 found 设置为 true,则循环将永远不会终止。

于 2013-04-05T00:57:22.370 回答
1

当您设置“found=true”时,您正在使循环永远运行。要么改变你的循环测试,所以你在找到时退出,例如

} while (i < numofitems && found == false );

或在找到设置后放置一个break语句,例如。

if ( items[i].name == itemname ) {
    found = true;
    break;
}
于 2013-04-05T01:02:11.767 回答
0

是的。另请注意,打印出 10 个字符。每个循环迭代打印两次,因此循环执行良好,直到 i 超过 numofitems。由于此时'found == true',循环尝试第六次迭代,导致总线错误(通常称为分段错误

于 2013-04-05T01:02:05.173 回答