此程序旨在获取一个小于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;
}
我非常感谢您解决此问题的任何帮助。该计划没有按预期执行;它不会输出数字后面输入的文字。 此外,这个网站一直在向我发送垃圾邮件,告诉我我的问题主要是代码。所以我正在写一堆乱七八糟的东西试图安抚该死的机器。希望这已经足够了,我终于可以发布我的问题了。
答案 0 :(得分: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 << 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()调用之后模拟垃圾收集器。
P.S。只有两个变化:1)在giveOutput中输出数字[i]而不是i; 2)取出cin.ignore()。