为什么不是';t值匹配? 我有一个C++控制台应用程序代码,它会查找条件,然后将文本保存到(.txt)文件。
但这一条件在这里并不适用。我的条件是:为什么不是';t值匹配? 我有一个C++控制台应用程序代码,它会查找条件,然后将文本保存到(.txt)文件。,c++,C++,但这一条件在这里并不适用。我的条件是: char command[100]; cin >> command; if (command == "save") { fstream file; file.open("C:\\Users\\AfzaalAhmad\\Documents\\text.txt"); file << "Data you provided was as saved!"; cout << "File Saved!"
char command[100];
cin >> command;
if (command == "save") {
fstream file;
file.open("C:\\Users\\AfzaalAhmad\\Documents\\text.txt");
file << "Data you provided was as saved!";
cout << "File Saved!";
}
else {
cout << "Ummm, sir I think there is an error!\n" <<
"The command you entered was: " << command;
}
然后将数据保存到一个文件中,当我使用此代码时,该文件中显示数据:
if(command != "save")
由于该命令不必保存,因此代码将执行并提供documents文件夹中文件中的数据
但是,如果执行else
块,我仍然可以在末尾看到正确的命令“save”,正如您在代码块中看到的那样,代码显示了该命令
您可以看到,我使用的是正确的命令,但它不是作为if(command==“save”)
执行的,而是如果我使用此代码if(command!=“save”)
执行的
有什么指导吗?要比较c字符串,您应该使用
strcmp()
函数。您正在比较命令的地址和字符串文本的地址。他们永远不会是原来的样子
可能的解决办法:
- 使用C库函数strcpy
:if(0==strcmp(命令,“save”))
if(command==“save”s)
std::string command;
cin >> command;
if (command == "save") {
command
和字符串literal“save”
都是char
s的数组。它们都被转换为指向第一个元素的指针(这称为数组到指针的转换),您正在比较这些指针。那么,您真正使用command==“save”做什么呢“
正在检查它们的第一个字符是否具有相同的地址
相反,要比较所需的C样式字符串(检查字符串中的所有字符是否相同),需要使用。然而,C++中一个更为可取的解决方案是使<代码>命令<代码> A<代码> STD::String ,而不是一个数组> ch> char < /C>code>std::string支持使用
=
进行比较,因为您应该使用strcmp
来比较C样式的字符串。或者使用std::string
,除了能够将字符串与=
进行比较外,它在许多其他方面也更好
C样式的字符串常量只是保存该特定字符串的某个内存的地址,因此,当您比较命令==“save”
,那么要使该比较为真,命令必须与常量字符串“save”
具有相同的地址,这显然从来都不是这样的情况。在这种情况下
if (command == "save")
您正在尝试比较字符数组。但是C和C++都没有数组的比较运算符。相反,该操作左侧的字符串文字和数组被隐式转换为指向它们的第一个字符的指针,事实上,您正在比较两个始终不相等的指针。
比较字符数组,您应该使用标准C函数<代码> STD:STRCMP < /C> >,在标题<代码> <代码>(C++)或<代码> <代码>(C)< /P>
比如说
if ( std::strcmp( command, "save" ) == 0 )
变量command
的类型为char*
,因为C/C++中的数组(基本上)是指针(以及固定的最大数组大小)。使用C++时,请考虑使用<代码> STD::String < /C> >:.< /P>
您使用的是C样式的字符串,并且必须使用函数,例如strcmp
,例如:。但是,这是C方式,如果你写C++,你应该坚持<代码> STD::String 类,这样。< P>命令是一个字符数组,你不能将它与这样的字符串文字进行比较(实际上你正在比较Adress)。如果不想使用重载==运算符的std::string,可以说
strcmp(command, "save"); // it returns zero if equal
为什么不使用std::string
?使用one可以解决很多问题当我使用std::string
时,它会在使用cin>>命令时出错@Bojangles:(+1,是的,也许这就是我的例子中的错误..我只是比较了这些数组,认为它会像在ASP.NET中那样做!
strcmp(command, "save"); // it returns zero if equal