提问人:KoLaR666 提问时间:6/1/2021 最后编辑:Vlad from MoscowKoLaR666 更新时间:6/1/2021 访问量:96
C++ bool 行为不符合预期 [重复]
C++ bool behaviours not as expected [duplicate]
问:
我在C++中的反转布尔值有一些奇怪的问题。:')
我想检查传递给主方法的参数是否不是“file.txt”。如果不是,我想创建以名称作为主要参数的新文件,并在那里写下随机数据行。否则我想从“file.txt”读取数据。
一切都如我所愿,但是当我输入终端时,程序将此随机数据输入“file.txt”而不是从中读取。
另一方面,当我输入时:它正在从“file.txt”读取。有什么想法吗?g++ sourcefile.cpp header.h
./a.out file.txt
./a.out someRandomData.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.
(...)
答:
0赞
Vlad from Moscow
6/1/2021
#1
您需要比较两个 C 字符串,而不是比较存储它们的地址。
那就是写
#include <cstring>
//...
if( strcmp( argv[1], "file.txt" ) != 0 ){
否则,在此 if 语句中
if(argv[1] != "file.txt"){
比较了两个指针:和指向字符串文本的第一个字符的指针。argv[1]
"file.txt"
由于字符串占用的内存范围不同,因此 if 语句的条件将始终计算为 true。
评论
argv[1] != "file.txt"
永远不会是假的。