C++输出错误的字符串
C++ outputting wrong string
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
char FirstName[50];
char LastName[50];
char MyFirstName[5] = "Bill";
char MyLastName[10] = "Dillinger";
cout << "Enter your first name" << endl;
cin >> FirstName;
cout << "Enter your last name" << endl;
cin >> LastName;
if (FirstName && LastName) {
cout << "Hello " << FirstName << " " << LastName << endl;
} else if(FirstName == MyFirstName && LastName == MyLastName) {
cout << "Hello, my creator!" << endl;
};
system("pause");
return 0;
}
使用上面的代码,我总是从 if 语句中得到第一个结果。即使我输入我的名字,我也永远不会得到"你好,我的创造者!"。如何修复此代码?
让我们来看看这个。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
到目前为止还不错,但这里有一个简短的插曲:请花时间正确缩进您的代码。 这将使维护变得更加容易。 你以后会感谢我的。
在 C++ 中,不需要使用 C 样式字符串。 但是你说你必须这样做,这让我想知道为什么你的导师没有让你使用C。 但无论如何。
char FirstName[50];
char LastName[50];
char *MyFirstName = "Bill";
char *MyLastName = "Dillinger";
继续:
cout << "Enter your first name" << endl;
cin >> FirstName;
cout << "Enter your last name" << endl;
cin >> LastName;
到目前为止很好,但是通过您的if
声明,我们遇到了一个问题.. 基本上,在您的旧代码中,FirstName 和 LastName 是指向分配给您的 RAM 块的指针。 它始终是分配的,因为您在堆栈上执行了它。 (也就是说,您没有使用new
和delete
。 这些指针永远不会NULL
,所以你的比较永远是正确的! 此外,在我的版本中,我使用一个名为 strcmp
的标准 C 函数来比较指针指向的字符串。 这是一个重要但微妙的观点。 LastName
、MyFirstName
等。都是指向您使用上述[50]
语法保留的 RAM 块的指针。 如果你直接比较它们,你就是在比较两个数字。
所以,我会改变你的if
块,因为第二个测试(平等)绝对有意义。
if(strcmp(FirstName, MyFirstName) == 0 && strcmp(LastName, MyLastName) == 0) {
如果两个字符串相等,strcmp
返回0
。
cout << "Hello, my creator!" << endl;
}
else {
cout << "Hello " << FirstName << " " << LastName << endl;
}
而且我们回家了! 请注意,以下system("pause")
命令将正常工作,因为您使用的是Windows。 请记住,它不能移植到Linux等其他平台。
system("pause");
return 0;
}
希望对您有所帮助!
毫无意义
if (FirstName && LastName)
它没有意义的原因是它总是正确的,FirsName 和 LastName 总是 != 0,因为它们是数组地址。
如果你想读取这样的数组,请使用getline()
std::cin.getline (FirstName,sizeof(FirstName));
现在,当您拥有数组时,像您那样比较它们是没有意义的,数组名称是地址,因此将 FirstName 与 MyFirstName 进行比较永远不会是真的
else if(FirstName == MyFirstName && LastName == MyLastName)
相反,您需要比较数组的内容,这可以是strcmp
else if (!strcmp(FirstName,MyFirstName) && !strcmp(LastName,MyLastName))
你的第一个 IF 语句将始终为真,因此第二个语句永远不会被执行。
因此,从该语句中删除"else"。
该程序应该正常工作。
if(strcmp(FirstName,MyFirstName) && strcmp(LastName,MyLastName))
{
cout << "Hello, my creator!" << endl;
};
只是一个提示。使用指针总是更好!
- C++函数的字符串错误"find_first_of"
- 流字符串错误输出
- 在图像上覆盖文本的程序会产生无休止的字符串错误
- 字符串错误的向量
- C++字数统计程序使用C字符串错误在程序运行后
- 从函数返回字符串C++错误
- 字符串错误或编译器错误
- SQL 字符串错误?没有这样的列
- C/C++ 字符串错误与 ARM SEG 故障总线错误
- 字符串错误输出
- C++调用堆上的类(空字符串错误)
- 运行时字符串错误C++
- 字符串递归函数中的字符串错误
- 从文本文件/文本流中读取Q字符串错误
- 动态内存c++程序中的字符串错误
- 发现c++正则表达式子字符串错误模式
- 在Cocos2d-x中比较字符串错误
- c++读TXT到字符串错误
- 字符串错误检查
- Chromium嵌入式框架VS2013字符串错误