【发布时间】:2019-05-24 01:18:27
【问题描述】:
我正在尝试为我的学生构建一个示例应用程序,该应用程序应该演示如何使用 cin.getline 和 cin.ignore 输入多个 c 字符串,但我得到了奇怪的结果。在我下面的代码中有两个注释的 cin.ignore 语句。如果我取消注释第一个,则在运行时需要按两次 Enter 输入第一个字符串,只输入第二个字符串。如果我取消注释第二个,那么两个字符串都输入一个 Enter 但第二个字符串不知何故丢失了第一个字母。
#include <iostream>
using namespace std;
struct Unit{
int uid;
char* name=new char[50];
char* shname=new char[10];
};
int main() {
Unit u;
cout << "Record number: ";
cin >> u.uid;
cout << "Unit name: ";
cin.ignore();
cin.getline(u.name,50);
//cin.ignore();
cout << "Unit short name: ";
//cin.ignore();
cin.getline(u.shname,10);
cout << "Record number: " << u.uid << endl
<< "Unit name: " << u.name << endl
<< "Unit short name: " << u.shname << endl;
return 0;
}
我不太明白我做错了什么
【问题讨论】:
-
“我做错了什么”使用
new和 C 风格的字符串,对于初学者来说。 -
getline()读取到并包括换行符,因此不需要ignore()。当两者都被注释掉时会发生什么?
标签: c++