永发信息网

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

答案:4  悬赏:10  手机版
解决时间 2021-05-17 13:03
  • 提问者网友:世勋超人
  • 2021-05-16 16:29
#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的那个遁环的时候,名字和数字就无法正常输入,为什么会这样。
最佳答案
  • 五星知识达人网友:封刀令
  • 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();清掉缓冲区里的回车换行符,这样下次才能正常输入字符串。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯