C ++中的无休止循环,比较两个char

时间:2013-12-07 10:58:57

标签: c++ loops c++11 while-loop char

我有这个:

#include <iostream>
#include <conio.h>

int main ()
{
     char str1[] = "abc123";
     char str2[] = "abc123";
     do
     {
          std::cout << "String: ";
          std::cin >> str2;
     } while (str1 != str2);
     std::cout << "str1 is equal to str2, press any key to quit.\n";
     _getch();
     return 0;
}

当str1等于str2时程序应该结束,而str2是用户设置的值。问题是,即使我输入与str1相同的值,它也会保持循环,如果我放入与str1中相同的内容也无关紧要。

5 个答案:

答案 0 :(得分:3)

使用std::string而不是原始数组和指针,以避免像打开缓冲区溢出,比较指针而不是字符串等愚蠢的错误,等等。


#include <iostream>
#include <string>

int main ()
{
     std::string str1 = "abc123";
     std::string str2 = "abc123";
     do
     {
          std::cout << "String: ";
          std::cin >> str2;
     } while (str1 != str2);
     std::cout << "str1 is equal to str2.\n";
}

答案 1 :(得分:3)

您没有正确比较这两个字符串,您正在比较两个字符串数组的地址。

你必须使用strcmp函数。

while(strcmp(str1,str2)!=0)

或者使用std :: string类,它允许你使用重载的运算符==来比较字符串。

答案 2 :(得分:2)

str1和str2是char数组,这实际上意味着它们是char数组的指针。他们的价值观是不变的,永远不会是平等的。将声明替换为:

 string str1 = "abc123";
 string str2 = "abc123";

你会得到更好的结果。 (但需要标题)

答案 3 :(得分:0)

您正在比较指针。

请使用strcmp

此外,使用cin是不安全的,因为左边可能太小了。

修改为

} while(strcmp(str1, str2))

答案 4 :(得分:-1)

在分配两个数组的主函数堆栈框架中:

两个数组得到两个不同的固定地址,永远不会改变!

即使每次都改变数组的内容!

char str1[] = "abc123";  // str1 gets an unique fixed address  say 1000
char str2[] = "abc123";  // str2 gets an unique fixed address  say 1007

因此,语句while (str1 != str2);继续比较地址1000和1007以及

因此循环条件始终为真。