#include <iostream>
#include <new>
#include <cstring>
using namespace std;
struct chaff
{
char dross[20];
int slag;
};
char buffer[100];
int main()
{
chaff * p1;
p1 = new(buffer) chaff[2];
for (int i=0; i<2; i++)
{
cout << "input the first name: " << endl;
cin.getline(p1[i].dross,20);
cout << "input the slag value for " << p1[i].dross << endl;
cin >> p1[i].slag;
}
for (int i = 0; i < 2; i++)
cout << p1[i].dross << ": " << p1[i].slag << endl;
system("pause");
return 0;
}
想问一下当i=0的时候,名字和数字能正常输入,但当i=1的那个遁环的时候,名字和数字就无法正常输入,为什么会这样。
C++ for loop 输入字符串及数字的问题
答案:4 悬赏:10 手机版
解决时间 2021-05-17 13:03
- 提问者网友:世勋超人
- 2021-05-16 16:29
最佳答案
- 五星知识达人网友:封刀令
- 2021-05-16 17:14
getline()函数接收流里面的字符,遇到'\n'就停止接收,哪怕是第一个字符,在一轮循环后,cin.getline(p1[1].dross,20)直接遇到之前的回车符,所以不正常,可以在这之前加上cin.ignore();知道这个循环只循环2次,所以可以直接加在cin>>p1[i].slag;之后。
全部回答
- 1楼网友:愁杀梦里人
- 2021-05-16 20:04
很早以前遇到过这个问题,貌似是因为STDIO或者C++的流库,的标准输入都是用的一个静态的缓冲区的原因,具体原因找流库的源码来看看应该就知道了。解决办法倒是好办,在输入循环完成的时候刷新下缓冲区就好了。STDIO的是flushall,流库的忘了,定位到iostream然偶搜索flush找找,很容易找到这个函数。
- 2楼网友:胯下狙击手
- 2021-05-16 18:54
你这个程序貌似本身就有错误啊,我运行编译有一个错误。
- 3楼网友:猎心人
- 2021-05-16 18:05
#include <iostream> #include <new> #include <cstring> using namespace std; struct chaff { char dross[20]; int slag; }; char buffer[100];
int main() { chaff * p1; int i; p1 = new(buffer) chaff[2]; for (i=0; i<2; i++) { cout << "input the first name: " << endl; cin.getline(p1[i].dross,20); cout << "input the slag value for " << p1[i].dross << endl; cin >> p1[i].slag; cin.ignore(); } for (i = 0; i < 2; i++) cout << p1[i].dross << ": " << p1[i].slag << endl; system("pause"); return 0; }
输入数字之后,输入缓冲区里面还有回车换行符,调用 cin.ignore();清掉缓冲区里的回车换行符,这样下次才能正常输入字符串。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯