永发信息网

C++ for loop 输入字符串及数字的问题

答案:4  悬赏:10  手机版
解决时间 2021-05-17 13:03
#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的那个遁环的时候,名字和数字就无法正常输入,为什么会这样。
最佳答案
getline()函数接收流里面的字符,遇到'\n'就停止接收,哪怕是第一个字符,在一轮循环后,cin.getline(p1[1].dross,20)直接遇到之前的回车符,所以不正常,可以在这之前加上cin.ignore();知道这个循环只循环2次,所以可以直接加在cin>>p1[i].slag;之后。
全部回答

很早以前遇到过这个问题,貌似是因为STDIO或者C++的流库,的标准输入都是用的一个静态的缓冲区的原因,具体原因找流库的源码来看看应该就知道了。解决办法倒是好办,在输入循环完成的时候刷新下缓冲区就好了。STDIO的是flushall,流库的忘了,定位到iostream然偶搜索flush找找,很容易找到这个函数。

你这个程序貌似本身就有错误啊,我运行编译有一个错误。

#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();清掉缓冲区里的回车换行符,这样下次才能正常输入字符串。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
QQ空间现在怎么找不到添加网络音乐的地方了
我们做的是WOW强人
请求各位帮忙一下
黄骅泰和房地产开发有限公司地址在哪,我要去
长沙县世龙世家手足健康护理连锁(长沙县黄花
QQ狗狗宠物里头的蓝宝石怎么免费刷出来啊!跪
YY里可以入多个会吗?
额定电流问题
请问女同志,如果你的老公对上司溜须拍马,你
把我下面这个图弄成40*40
比喻泉水的诗词,描写泉水的比喻句子
谁帮我注册一个QQ邮箱
怎么才叫志同道合?
魅族M8 怎样才能使用动态桌面????
西塞山区黄石0.618日式精致剪烫地址在哪里啊
推荐资讯
为什么想知道的问题没人回答,而有人回答的问
江汉区武汉互联电脑会计学校哪位知道具体地址
荷塘区株洲锦和便利店地址在什么地方,想今天
龙凤区大庆Hi辣一绝地址有谁知道?有点事想过
形容有德行的名言、成语
使用英语用英语怎么说,召集令用英语怎么说
买二手小轿车怎么看车是否良好?
爱情句子含有双双,岚字带有诗意的名字
竹山县十堰圣象地板怎么去啊,谁知道地址啊
江岸区武汉飞翔连锁超市(航道街店)地址在什么
A、B间的距离为1厘米,该图比例尺为如果测得
白痴狼人杀是什么意思,狼人有什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?