我目前感到困惑的是为什么我的程序没有按照应有的方式执行。每当我运行它,它只执行第一个cout& cin声明并完全绕过第二个。程序需要请求两个名称并将它们存储在字符串对象中。
然后它应该报告是否,忽略大小写,它们是相同的(如测试名称“jack”是否与“JACK”相同,它将显示名称相同而忽略了较低的差异/大写字母。)问题为程序提供了两个所需的标题,因此您将在初学者中看到bool和字符串标题。
以下是我当前的代码:http://pastebin.com/Ju0MjkfP
#include <iostream>
using namespace std;
string upperCaseIt(string s);
bool sameString (string s1, string s2);
int main ()
{
char name1, name2;
cout << "Enter a name: ";
cin >> name1;
cout << "Enter another name and I will test if they are the same.";
cin >> name2;
if (name1==name2)
cout << name1 << " is the same as " << name2 << endl;
if (name1!=name2)
cout << name1 << " is not the same as " << name2 << endl;
system ("pause");
return 0;
}
bool sameString (char name1)
{
if (name1)
return true;
else
return false;
}
编辑:我输入“jack”和“JACK”进行测试。
任何提示都将受到赞赏;感谢。
答案 0 :(得分:3)
答案 1 :(得分:3)
您应该使用std::string
,而不是char
。 char
变量只会包含一个字符(例如'a',而不是像“Alfred”这样的全名。
所以你应该做
std::string name1, name2;
而不是
char name1, name2;
此外,您的sameString
似乎还不完整,只会检查您的name1
变量是否为!= 0
答案 2 :(得分:2)
详细说明其他正确答案,以及#34;跳过&#34;第二个cin是缓冲输入。当它要求您输入名称时,您键入几个字符(例如,Mike)。以下行调用cin上的operator>>
方法来存储您输入的数据。如果您已将name1
声明为std::string
,则会读取换行符,保存字符串&#34; Mike&#34;在变量中,并丢弃换行符。此时,您输入的每个字符都将被读入,因此缓冲区中不会留下任何内容。
但是,您将name1
声明为char
- 一个字符。因此,当C ++执行cin >> name1
调用时,它正确地意识到它只能存储一个字母,所以它只读取。这意味着name1
只是&#39; M&#39;还有剩下的东西还没有被读过。在这种情况下,&#34; ike&#34;。因此,下次需要阅读时,它不需要等待您输入任何其他内容。它只是继续读取你已经填充的缓冲区。