【发布时间】:2014-05-16 04:56:14
【问题描述】:
我的任务是将字符串输入到 char 数组中。这就是它的样子:
char name[30];
cin>>name;
cin.getline(name,29);
cout<<name;
与输入一样:Ly Nguyen Khang
结果只返回Nguyen Khang
请任何人帮助我理解这有什么问题:(
我的部分代码:
#define INPUT_HELP_NAME "Please input name: "
#define INPUT_HELP_PHONE "Phone: "
cout << INPUT_HELP_NAME;
cin.getline(res->name, MAX_NAME_LENGTH-1);
cout << INPUT_HELP_PHONE;
cin >> res->phone;
当它运行时,它会显示如下内容:
Please input name : Phone :
【问题讨论】:
-
你将
Ly写成name和cin>>name;,然后你用cin.getline(name,29);覆盖名称的其余部分 -
使用
std::string代替char数组。 -
一般来说,混合基于行和基于字段的输入不能很好地协同工作。对于定期提示用户输入值的交互式程序,仅使用基于行的。然后,使用 stringstreams(或 lexical_cast)将整行转换为相应的值并检查错误。祝你好运!
-
其实老师要求我们用char作为知识的考验,后面还有几个cin,比如电话号码,生日...。这些也设置成char类型,我可以很容易使用 cin>> 来读取它们,但是函数 cin>> 的问题是它是否会停止它们之间的空格,所以它不可能使用 cin>> 作为名称。
-
char 数组的问题是
operator>>会愉快地写到数组末尾之外,从而导致所谓的缓冲区溢出。这是软件中许多漏洞的根源,没有任何借口可以教授这种粗心的编程。使用std::string会自动调整字符串的大小。
标签: c++ visual-c++ visual-studio-2013