如何解决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 举报,一经查实,本站将立刻删除。