如果声明不起作用,即使声明是真的

时间:2013-12-08 21:04:48

标签: c++

我的文字文件包含

Wew213
Wew214
Wew215

我在程序中的输入是

Wew213

但是它显示了输出

"Not Matched"

实际上我正在做的是我想输入输入,如果输入匹配文本文件中的数字,它应该通过if语句运行输出,否则声明

这是我的程序

char file_data[10];
std::ifstream file_read ("D:\\myfile.txt");
cout<<"Enter the number to search"<<endl;
char val[10];
cin>>val;
while(!file_read.eof())
{
    file_read>>file_data;
    cout<<file_data<<endl;
    }
    if (val == file_data)
    {
        cout<<"Matched"<<endl;
    }
    else
    {
           cout<<"Not Matched"<<endl;
    }
}

5 个答案:

答案 0 :(得分:8)

你正在比较指针值,这是不同的

您需要使用strcmp来比较c字符串。或使用std::string

if (strcmp(val, file_data) == 0)
{
    cout<<"Matched"<<endl;
}
else
{
       cout<<"Not Matched"<<endl;
}

if (std::string(val) == std::string(file_data))
{
    cout<<"Matched"<<endl;
}
else
{
       cout<<"Not Matched"<<endl;
}

答案 1 :(得分:4)

==测试会比较地址valfile_data。而不是==,要比较字符数组的内容,请使用函数strcmp()

答案 2 :(得分:4)

给定的代码,

char file_data[10];
std::ifstream file_read ("D:\\myfile.txt");
cout<<"Enter the number to search"<<endl;
char val[10];
cin>>val;
while(!file_read.eof())
{
    file_read>>file_data;
    cout<<file_data<<endl;
    }
    if (val == file_data)
    {
        cout<<"Matched"<<endl;
    }
    else
    {
           cout<<"Not Matched"<<endl;
    }
}
通过AStyle运行后,

看起来像这样:

    char file_data[10];
    std::ifstream file_read ("D:\\myfile.txt");
    cout<<"Enter the number to search"<<endl;
    char val[10];
    cin>>val;
    while(!file_read.eof())
    {
        file_read>>file_data;
        cout<<file_data<<endl;
    }
    if (val == file_data)
    {
        cout<<"Matched"<<endl;
    }
    else
    {
        cout<<"Not Matched"<<endl;
    }
}

所以,由于在循环之后完成检查,只检查循环读取的 last 项,即使你得到字符串比较本身也是正确的你的程序不行。

比较不起作用,因为正如其他人(冲进去)已经注意到的那样,你在比较指针,而不是字符串。

要比较字符串,请使用 std::string 而不是字符数组。


小修正:而不是

while(!file_read.eof())

while(!file_read.fail())

或只是

while(file_read)

为你调用fail(否定结果)。

但是这样做,你必须检查输入操作的成功/失败。

常见的习惯是直接这样做:

while( file_read>>file_data )

答案 3 :(得分:2)

==运算符将简单地比较地址。您将需要使用strcmp函数。

答案 4 :(得分:1)

字符数组没有比较运算符。不要自己比较数组,而是比较数组的第一个元素的地址。