接受与结构数组相关的输入 我现在正在练习C++,我正在从C++入门教材中做这个问题,我陷入了最后一步。基本上,我要从包含汽车信息的结构中创建一个数组,我遇到的问题是记录用户的输入。
我的代码:接受与结构数组相关的输入 我现在正在练习C++,我正在从C++入门教材中做这个问题,我陷入了最后一步。基本上,我要从包含汽车信息的结构中创建一个数组,我遇到的问题是记录用户的输入。,c++,C++,我的代码: #include <iostream> #include <string> struct car{ std::string make; int year; }; int main() { std::cout << "How many cars do you wish to catalog? "; int lim; std::cin >> lim; car* info = new car
#include <iostream>
#include <string>
struct car{
std::string make;
int year;
};
int main()
{
std::cout << "How many cars do you wish to catalog? ";
int lim;
std::cin >> lim;
car* info = new car[lim];
for(int i = 0; i<lim; i++)
{
std::cout << "Please enter the make: ";
getline(std::cin, info[i].make); // problem here..
std::cout << "Please enter the year made: ";
std::cin >> info[i].year; // problem here as well :(
}
std::cout << "here is your collection:\n";
while(int i = 0 < lim)
{
std::cout << info[i].make << " " << info[i].year << std::endl;
//std::cout << "here is your collection:\n"
i++;
}
return 0;
}
#包括
#包括
结构车{
std::字符串生成;
国际年;
};
int main()
{
std::cout>lim;
car*info=新车[lim];
对于(int i=0;i来说,将cin和getline组合在一起是…时髦的。cin从不从第一个字符串中读取换行符,因此您的第一个getline调用将几乎只返回一个空白字符串。当我遇到这样的问题时,通常会在我的cin之后执行一次性getline()调用
将getline和cin组合在一起通常不是很友好。也许你应该切换到所有的getline并进行一点字符串操作?将cin和getline组合在一起非常有趣。cin从不读取第一个字符串中的换行符,所以你的第一个getline调用几乎只会返回一个空白字符串。我通常做的是当我遇到这样的问题时,在我的cin之后执行一次性getline()调用
将getline和cin结合起来通常不是很友好。也许您应该切换到所有getlines并进行一点字符串操作?在使用
std::cin >> lim;
及
一个换行符留在流中,由getline
作为有效输入提取
您需要添加代码来忽略行的其余部分
std::cin >> lim;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
到
for(int i=0;i std::cout在您使用
std::cin >> lim;
及
一个换行符留在流中,由getline
作为有效输入提取
您需要添加代码来忽略行的其余部分
std::cin >> lim;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
到
for(int i=0;i#包括
#包括
结构车{
std::字符串生成;
整年=0;
};
int main()
{
int i=0;//增量值
std::cout>lim;
car*info=新车[lim];
对于(i;iinfo[i].make;//更改为cin,就像当年一样
std::cout>info[i].year;//这很好
}
std::cout#包括
#包括
结构车{
std::字符串生成;
整年=0;
};
int main()
{
int i=0;//增量值
std::cout>lim;
car*info=新车[lim];
对于(i;iinfo[i].make;//更改为cin,就像当年一样
std::cout>info[i].year;//这很好
}
std::您的问题是否没有明确说明。问题是什么?您有什么问题?我高度怀疑您的问题是:while(int I=0
无论您认为它做什么,它都不会做什么。我认为,但不确定,它每次通过循环时都会使I==1
,并导致无限循环。您已经编写了一个循环,迭代所有数组元素-为什么您觉得有必要发明一种新语法?您记录用户输入的问题还是必须这样做有输出吗?因为正如Igor所指出的,你的while循环不会输出你所期望的。@Harrison无限循环很可能是导致程序“崩溃”的原因(我猜OP正在经历的是程序停止工作)输入问题是重复的。伙计们,感谢您的输入,我成功地修复了基础问题,在最初调用cin读取输入行中仍然保留的\n后,我添加了一个cin.get(),然后添加了另一个cin.get()在获得这一年之后。你的问题没有明确说明。问题是什么?你有什么问题?我高度怀疑你的问题是:while(int I=0
无论您认为它做什么,它都不会做什么。我认为,但不确定,它每次通过循环时都会使I==1
,并导致无限循环。您已经编写了一个循环,迭代所有数组元素-为什么您觉得有必要发明一种新语法?您记录用户输入的问题还是必须这样做有输出吗?因为正如Igor所指出的,你的while循环不会输出你所期望的。@Harrison无限循环很可能是导致程序“崩溃”的原因(我猜OP正在经历的是程序停止工作)输入问题是重复的。伙计们,感谢您的输入,我成功地修复了基础问题,在最初调用cin读取输入行中仍然保留的\n后,我添加了一个cin.get(),然后添加了另一个cin.get()在得到一年之后,我应该得到我的LIM和信息。年。所以我应该得到我的LIM和信息。年我设法修复我的while循环,但你的第一部分的修复似乎有点先进,我还没有进入C++还没有。有可能是一个更可理解的NOOB方法?@ TaksHg,<代码> ISRAM::忽略< /代码>可以用来忽略D。输入流上的ata最多为给定的字符数。您可以用一个简单的数字替换std::numeric\u limits::max()
,例如100
,它也应该可以工作。好的,谢谢,我刚才还通过添加一个cin.get()修复了它要获得新行LOL.TakHHEN,记住如果在数字之后恰好进入空格键,你会遇到同样的问题。<代码> STD::忽略是一个更强壮的方法来填充剩下的行。我设法修复了while循环,但是你的第一部分的修复看起来有点先进,我还没有深入到C++中。erhaps有一种更容易理解的noob方法?@TakShing,istream::ignore
可用于忽略输入流中的数据,最多可忽略给定的字符数。您可以替换std::numeric\u limits::max()
使用一个简单的数字,比如100
,它也应该可以工作。好的,谢谢,我刚才还通过添加一个cin.get()来获得新行lol来修复它。@TakS
while(int i = 0 < lim)
{
std::cout << info[i].make << " " << info[i].year << std::endl;
//std::cout << "here is your collection:\n"
i++;
}
for(int i = 0; i < lim; ++i)
{
std::cout << info[i].make << " " << info[i].year << std::endl;
//std::cout << "here is your collection:\n"
}
#include <iostream>
#include <string>
struct car{
std::string make;
int year = 0;
};
int main()
{
int i = 0; //increment value
std::cout << "How many cars do you wish to catalog? ";
int lim;
std::cin >> lim;
car* info = new car[lim];
for(i; i < lim; i++)
{
std::cout << "Please enter the make: ";
std::cin >> info[i].make; // change to cin, just like the one for year
std::cout << "Please enter the year made: ";
std::cin >> info[i].year; // this was fine
}
std::cout << "here is your collection:\n";
i = 0; //resets the increment value
while(i < lim)
{
std::cout << info[i].make << " " << info[i].year << std::endl;
//std::cout << "here is your collection:\n"
i++;
}
return 0;
}