微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ bool 行为不符合预期

如何解决C++ bool 行为不符合预期

我对 C++ 中的反转布尔值有一些奇怪的问题。 :') 我想检查传递给 main 方法的参数是否不是“file.txt”。如果不是,我想创建名称作为主要参数的新文件,并在其中写入随机数据行。否则我想从“file.txt”中读取数据。 一切正常,如我所愿,但是当我打字时 g++ sourcefile.cpp header.h 在终端,然后 ./a.out file.txt 程序正在将此随机数据输入到“file.txt”中,而不是从中读取。 另一方面,当我输入时: ./a.out someRandomData.txt 它正在读取“file.txt”。有什么想法吗?

    int main(int argc,char* argv[]) {
        if(argv[1] != "file.txt"){
            fileWithRandomData(argv[1]);    
        }
        else{

        std::vector<std::string> row;
        std::string line,word,temp;
        std::ifstream MyReadFile(argv[1]);
        (...)

这是我的 fileWithRandomData 函数示例:

     void fileWithRandomData(string name){
        srand(time(NULL));
       
        std::ofstream MyFile(name);
        int MetalsNumber = rand() % 5000 + 1;  //first line -> number of available Metals.
        (...)
    

解决方法

您需要比较两个 C 字符串,而不是比较它们存储的地址。

就是写

#include <cstring>

//...

if( strcmp( argv[1],"file.txt" ) != 0 ){

否则在这个 if 语句中

if(argv[1] != "file.txt"){

比较了两个指针:argv[1] 和指向字符串字面量第一个字符的指针 "file.txt"

由于字符串占用内存的不同程度,if 语句的条件将始终评估为真。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。