C 指针运行时错误

C++ pointer runtime error

本文关键字:运行时错误 指针      更新时间:2023-10-16

我使用结构和指针制作了一个程序。但是由于某种原因,它无法正常工作。主要问题是,循环不会像这样。如果您可以解决此问题

,将会有所帮助
#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;

}

这将按照您的意图

工作