C 指针运行时错误
C++ pointer runtime error
我使用结构和指针制作了一个程序。但是由于某种原因,它无法正常工作。主要问题是,循环不会像这样。如果您可以解决此问题
,将会有所帮助#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct Book{
string name;
int release;
};
int main(){
//local variable
int i;
string release_dte;
int choice;
//interface
cout << "Welcome to Book Storage CPP" << endl;
cout << "How many entries would you like to make: ";
cin >> choice;
Book* Issue = new Book[choice];
//for handler
for (i = 0; i < choice; i++){
cout << "Book: ";
getline(cin, Issue[i].name);
cout << "Release Date: ";
getline(cin, release_dte);
Issue[i].release = atoi(release_dte.c_str());
}
cout << "These are your books" << endl;
for ( i = 0; i < choice; i++){
cout << "Book: " << Issue[i].name << " Release Date: " << Issue[i].release << endl;
}
system("pause");
return 0;
}
您没有检查输入是否成功,也不清除提取到 choice
之后留下的新线:
if ((std::cout << "Book: "), std::getline(std::cin >> std::ws, Input[i].name) && (std::cout << "Release Date: "), std::getline(std::cin >> std::ws, release_dte)) { Input[i].release = std::stoi(release_dte); }
您也应该使用std::stoi
用于C 字符串,如上所述。
我无法准确地推断出您所指的问题。但是我的猜测是for循环内部的getline()函数无法正常工作,我建议for循环之前的代码如下
cin.ignore (std::numeric_limits<std::streamsize>::max(), 'n');
for (i = 0; i < choice; i++){
cout << "Book: ";
getline(cin, Issue[i].name);
cout << "Release Date: ";
getline(cin, release_dte);
Issue[i].release = atoi(release_dte.c_str());
}
您的最终代码应为
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct Book{
string name;
int release;
};
int main(){
//local variable
int i;
string release_dte;
int choice;
//interface
cout << "Welcome to Book Storage CPP" << endl;
cout << "How many entries would you like to make: ";
cin >> choice;
Book* Issue = new Book[choice];
cin.ignore (std::numeric_limits<std::streamsize>::max(), 'n');
//for handler
for (i = 0; i < choice; i++){
cout << "Book: ";
getline(cin, Issue[i].name);
cout << "Release Date: ";
getline(cin, release_dte);
Issue[i].release = atoi(release_dte.c_str());
}
cout << "These are your books" << endl;
for ( i = 0; i < choice; i++){
cout << "Book: " << Issue[i].name << " Release Date: " << Issue[i].release << endl;
}
system("pause");
return 0;
}
这将按照您的意图
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 运行时错误:基0x000000000000溢出到0xffffffffffffffff的指针索引表达式 (basic_st
- 在指向矢量的智能指针上使用 push_back() 时运行时错误
- C 代码的运行时错误(基于指针)
- 使用MAP指针时运行时错误
- C 指针运行时错误
- C++指针运行时错误 - 使用指针设置变量然后检索
- 返回指针时运行时错误
- 访问指针类成员变量c++时发生运行时错误
- 成员函数指针运行时错误——ESP的值在函数调用中没有正确保存
- 运行时错误C++程序:检测到glibc,munmap_chunk(),指针无效
- 内存运行时错误:我们在哪里删除这个指针
- 传递派生类指针时的运行时错误
- 数组和指针 - 运行时错误
- c++对象指针的优先级队列在运行时错误为无效堆
- 指向结构的指针出现运行时错误
- 检查指针是否为NULL并导致运行时错误