c++ - 未处理的异常,来源未知

标签 c++ runtime-error unhandled-exception

这是家庭作业。我遇到了一个奇怪的错误,我不知道是什么原因造成的。这不是全部任务,但这是我目前所做的。因为这是家庭作业,所以我不希望有人告诉我确切的编码方式,而是我想知道是什么导致了我的崩溃,以及我如何才能开始寻找解决方法。我的程序似乎在遇到 main 方法中的 return 语句时崩溃了。所有输出似乎正是我想要获得的,我的文件正在被读取得很好。在我的所有信息都已打印后按下回车键后,我会看到一个消息框,上面写着“Exams.exe 中 0x5286ad84 (msvcp100d.dll) 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000063。” 感谢任何人可以提供的任何帮助。

#include <stdio.h>
#include <string>
#define MAX_STUDENTS 100
#define MAX_QUESTIONS 50
using namespace std;

int fGetAnswers(FILE *p_inputf, int p_studentIds[], string p_studentAnswers[]);
int fGetAnswers(int p_studentIds[], string p_studentAnswers[]);
void printData(int numOfStudents, int numOfQuestions, string *p_correctAnswers, int studentIds[], string studentAnswers[]);

int main(void)
{
    // Declarations
    FILE *inputf = fopen("examdat.txt", "r"); // Opens "examdat.txt" and creates a pointer to it.
    int studentIds[MAX_STUDENTS];
    int *p_ids = studentIds; // Pointer to the studentIds array to pass to functions for manipulation.
    string studentAnswers[MAX_QUESTIONS];
    string *p_answers = studentAnswers; // Pointer to the studentAnswers array to pass to functions for manipulation.
    int numOfQuestions;
    string correctAnswers;
    int numOfStudents;
    fscanf(inputf, "%d %s", &numOfQuestions, correctAnswers); // Fetches the first line from the exam.dat file which contains the number of questions and the correct answers.

    int readFrom = 0;
    while (readFrom != 1 && readFrom != 2) // Loops until proper input is received. Asks if the user wants to read student data from the text file or enter it manually.
    {
        printf("1. Read student data from file.\n");
        printf("2. Enter student data manually.\n\n");
        printf("Please make a selection> ");
        scanf("%d", &readFrom);
        if (readFrom != 1 && readFrom != 2)
            printf("\nInvalid entry!\n");
    }
    if (readFrom == 1) // Calls fGetAnswers to retrieve answers from the text file.
        numOfStudents = fGetAnswers(inputf, p_ids, p_answers);
    else // Calls fGetAnswers to retrieve answers from the user via the keyboard.
        numOfStudents = fGetAnswers(p_ids, p_answers);

    fclose(inputf);

    printData(numOfStudents, numOfQuestions, &correctAnswers, studentIds, studentAnswers);

    getchar();
    getchar();
    return(0);
}

最佳答案

可能会有很多错误,使用调试器可以帮助您找到它们。但我发现的两个是

printf("%d\t%s\n", numOfQuestions, *p_correctAnswers);

不能将 C++ 字符串与 printf 一起使用,只能使用 C 字符串。这会起作用

printf("%d\t%s\n", numOfQuestions, p_correctAnswers->c_str());

c_str 方法从 C++ 风格的字符串返回 C 风格的字符串。

还有一个类似的错误

int result = fscanf(p_inputf, "%d %s", &p_studentIds[i], p_studentAnswers[i]);

您不能将 C++ 字符串与 fscanf 一起使用。这个很难解决。既然您想使用 C++ 字符串(这是一个聪明的举动),我认为您还应该学习一些 C++ I/O,查找 iostreams

关于c++ - 未处理的异常,来源未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19343714/

相关文章:

c++ - 如何从一行中提取名称

c++ - MFC - 示例编辑框阿拉伯语字符集

c++ - 更改范围的字符格式

Excel VBA - 为什么我收到运行时错误

go - 与测试一起使用时方法无法访问全局变量

c++ - 迭代可变参数模板类的基类

java - PostgreSQL:通过 Java 更新我的用户表

C++:访问冲突写入位置

c# - try/catch 在 UnhandledException 处理程序中不起作用

c++ - 是否可以通过Visual Studio中未处理的异常继续调试?