我试图弄清楚运行时错误。我有一个struct数据类型,并在数组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
任何想法为什么我不能简单地比较一个char是否等同于另一个?
答案 0 :(得分: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;
}
答案 1 :(得分:2)
正如@chris所提到的,你的终止条件看起来不对。如果将found设置为true,则循环将永远不会终止。
答案 2 :(得分:1)
当您设置“found = true”时,您将使循环永远运行。更改循环测试,以便在设置找到时退出,例如
} while (i < numofitems && found == false );
或在设置找到后放置一个break语句,例如
if ( items[i].name == itemname ) {
found = true;
break;
}
答案 3 :(得分:0)
是的。另请注意,打印出10个字符。每个循环迭代打印两次,因此循环执行正常,直到我超过numofitems。由于此时'found == true',循环尝试迭代第六次,导致总线错误(通常称为segmentation fault)