c++ - 为什么值(value)不匹配?

标签 c++

我有一个 C++ 控制台应用程序代码,它会查找条件,然后将文本保存到 (.txt) 文件。

但是这里没有应用条件。我的情况是这样的:

char command[100];
cin >> command;
if (command == "save") {
    fstream file;
    file.open("C:\\Users\\AfzaalAhmad\\Documents\\text.txt");
    file << "Data you provided was as saved!";
    cout << "File Saved!";
}
else {
    cout << "Ummm, sir I think there is an error!\n" << 
    "The command you entered was: " << command;
}

我正在做的是检查用户提供的命令,如果命令是“保存”

if(command == "save") 

然后将数据保存到文件中,当我使用此代码时,文件中存在数据:

if(command != "save") 

因为命令不必保存,所以代码会执行并为我提供文档文件夹中文件中的数据。

但是,如果执行 else block ,我仍然可以在末尾看到正确的命令“保存”,正如您在代码块中看到的那样,代码显示了这一点。

enter image description here

你可以看到,我使用了正确的命令,但它不是作为 if(command == "save") 执行的,但是如果我使用这段代码 if(命令!=“保存”)

有什么指导吗?

最佳答案

command 和字符串文字 "save" 都是 char 数组。它们都被转换为指向第一个元素的指针(这称为数组到指针的转换)并且您正在比较这些指针。所以你真正用 command == "save" 做的是检查它们的第一个字符是否有相同的地址。

相反,要按需要比较 C 风格的字符串(检查字符串中的所有字符是否相同),您需要使用 std::strcmp .然而,在 C++ 中更可取的解决方案是使 command 成为 std::string,而不是 char 数组。 std::string 支持使用 == 进行比较。

关于c++ - 为什么值(value)不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21514021/

相关文章:

c++ - "[&](int i) "是否转换为 tbb 中的引用并行?

c# - SendMessage 到窗口句柄

c++ - Mongodb c++ 驱动程序 3.0,不是 const 数组

c++ - boost asio,如何取消异步操作

c++ - 基类可以有一个成员是派生类的实例吗?

c++ - Valgrind,即使我有空, block 也肯定会丢失?

c++ - 如果我将工作发布到线程池并且线程已经在 boost 中工作,会发生什么情况?

c++ - 两个字符串的交集和并集

c++ - Qt 单元测试 : QCOMPARE function on list of pointers

c++ - 如何找到拓扑排序的所有结果