好的,我会尝试解释你的问题:
我们假设这是您的输入:
这是这个词
这是一句话
当您使用 cin 并给它任何输入时,它会停在换行符处,在我的示例中,换行符位于“thisisaword”中的字符“d”之后。
现在,您的 getline 函数将读取每个字符,直到停止换行符。
问题是, getline 遇到的第一个字符已经是换行符,因此它立即停止。
这是怎么发生的?
我会尝试这样解释:
如果这是您给程序的输入(注意 \n 字符,将其视为单个字符):
这是这个词\n
这是一句话\n
你的 cin 函数将采取和留下什么:
\n
这是一句话\n
现在 getline 看到这个输入,并被指示获取每个字符,直到遇到换行符“\n”
\n 这是一句话\n
cin 读取输入并留下“\n”,其中 getline 包含“\n”。
为了克服这个问题:
\n 这是一句话\n
如前所述,我们不能再次使用 cin,因为它不会执行任何操作。
我们可以使用不带任何参数的 cin.ignore() 并让它从输入中删除第一个字符或使用 2x getline(第一个将获取剩余的 \n,第二个将获取带有 \n 的句子)
你也可以通过切换你的cin>>Word来避免这种问题;到 getline 函数。
由于它被标记为 C++,因此我将本示例中的 Char*[] 更改为 Strings:
string Word, Sentence;
cout << "Please enter a word: "; cin >> Word;
cout << endl << Word;
cin.ignore();
cout << "\nPlease enter a sentence: "; getline(cin, Sentence);
cout << endl << Sentence;
OR
string Word, Sentence;
cout << "Please enter a word: "; getline(cin, Word);
cout << endl << Word;
cout << "\nPlease enter a sentence: "; getline(cin, Sentence);
cout << endl << Sentence;