C++ 的初学者问题

A beginners issue for c++

本文关键字:问题 初学者 C++      更新时间:2023-10-16

该程序旨在获取少于15个字符的整数和名称,并将它们存储在数组中。

输入 0 时,程序显示数组的内容,然后终止。显然,这里有些不对劲...

#include <iostream>
#include <iomanip>
using namespace std;
bool getInput(int*, char(*)[15]);
void giveOutput(int*, char(*)[15]);
int main(void)
{
    bool repeat = true;
    int number[100] = {0};
    char name[100][15];
    do
    {
        repeat = getInput(number, name);
    } while(repeat);
    giveOutput(number, name);
    return 0;
}
void giveOutput(int* number, char(*name)[15])
{
    int i = 0;
    while(number[i] != 0)
    {
        cout << endl << i << setw(6) << name[i];
        i++;
    }
    cout << endl << endl;
    return;
}
bool getInput(int* number, char(*name)[15])
{
    int temp;
    int i = 0;
    for(; number[i] != 0; i++);
    cin >> temp;
    if(temp == 0)
        return false;
    number[i] = temp;
    cin.getline(name[i], 15, 'n');
    cin.clear();
    cin.ignore(512, 'n');
    return true;
}

我将非常感谢解决此问题的任何帮助。程序未按预期执行;它不会输出在数字后面输入的文本。此外,这个网站不断向我发送垃圾邮件,告诉我我的问题主要是代码。所以我正在写一堆胡言乱语来试图安抚这台该死的机器。希望这已经足够了,我终于可以发布我的问题了。

这是一个工作版本:

#include <iostream>
#include <iomanip>
using namespace std;
bool getInput(int*, char(*)[15]);
void giveOutput(int*, char(*)[15]);
int main(void)
{
  bool repeat = true;
  int number[100] = {0};
  char name[100][15];
  do
  {
    repeat = getInput(number, name);
  } while(repeat);
  giveOutput(number, name);
  return 0;
}
void giveOutput(int* number, char(*name)[15])
{
  int i = 0;
  while(number[i] != 0)
  {
    cout << endl << number[i] << setw(6) << name[i];
    i++;
  }
  cout << endl << endl;
  return;
}
bool getInput(int* number, char(*name)[15])
{
  int temp;
  int i = 0;
  for(; number[i] != 0; i++);
  cin >> temp;
  if(temp == 0) return false;
  number[i] = temp;
  cin.getline(name[i], 15, 'n');
  cin.clear();
  //cin.ignore(512, 'n');
  return true;
}

你不应该在 cin.clear() 调用后模拟垃圾收集器。

附言只有两个变化:1)输出数字[i]而不是给出输出中的i;2)取出cin.ignore()。