c++ - 简单的员工数据库程序
问题描述
我正在尝试构建一个初学者员工数据库程序。这是问题所在;当 main() 中的计数器“i”变为“1”时,跳过循环的第一行;换句话说,它不会等待用户输入“name”字符串的值。当我使用“cin”而不是“gets”时没有问题......为什么会这样?我使用 ubuntu 16.04。
#include <iostream>
#include <cstdio>
using namespace std;
void enter();
void report();
char name[2][30],salary[2][30];
int main()
{
int i;
for(i=0;i<2;i++){
cout<< "Name:"<<'\n';
gets(name[i]);
cout<< "Salary:"<<'\n'; cin>>(salary[i]);
}
report();
return 0;
}
void report()
{
int i;
cout<<"Name"<<'\t'<<"Salary"<<'\n';
for(i=0;i<2;i++){
cout<< name[i]<<'\t'<<salary[i]<<'\n';
}
}
解决方案
gets()
我建议不要使用,而是使用std::cin >> name[i];
或cin.getline(name[i], 30);
。后者将获取空间。
然后,由于填充缓冲区的额外返回字符,您将需要一个cin.ignore();
after 。cin >> salary[i];
推荐阅读
- r - R中dplyr过滤器内部的外部函数
- javascript - 使用环境变量配置 Firebase 时出错
- python - 熊猫从每个用户的第一个订单开始在回溯窗口中找到最小日期
- java - Java如何从具有多个字符串和双值的文本文件中读取一行?
- javascript - 特殊对象过滤
- c# - 通过引用存储在结构对象中的参数来传递参数
- javascript - 带有 AJAX 的函数最后运行,如何让它先运行
- python - 不支持从 DecimalField 到 Decimal 的 Django 转换
- java - Java 等价于 C 中的 fscanf
- php - 为什么 composer 以 root 身份运行,即使它的 setuid 已更改为另一个用户