我的文字文件包含
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;
}
}
答案 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)
==
测试会比较地址val
和file_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)
字符数组没有比较运算符。不要自己比较数组,而是比较数组的第一个元素的地址。