为什么我的非常基本的代码基本上只是改变数组元素的值(错误代码-1073741819)?

8 浏览
0 Comments

为什么我的非常基本的代码基本上只是改变数组元素的值(错误代码-1073741819)?

这个项目的核心思想是创建一个整数数组,并根据终端输入来改变它们的值。这是我的第一个项目,一切似乎都很顺利,但是它不起作用,我无法弄清楚出了什么问题。我认为可能与数组有关,但我不确定。

当我构建并运行它时,我会得到第10、11和12行的输出,但当我输入一个数字时,它只会显示:进程返回-1073741819(0xC0000005)

#include
#include
int main()
{
    int account[1000];
    // 提示可选项
    printf("查询余额: 3\r\n");
    printf("存入现金: 2\r\n");
    printf("取出现金: 1\r\n");
    // 创建循环变量
    int q;
    // 创建“无限循环”
    for(q=0;q<100000;++q){
        printf("选择操作\r\n");
        int acted;
        int am;
        int acc;
        scanf("%d", &acted);
        printf("输入账户号码\r\n");
        scanf("%d", &acc);
        // 检查选择的选项
        if (acted == 1) {
           printf("请输入要取出的现金金额");
           scanf("%d", &am);
           account[acc]=(account[acc]-am);
        } else if(acted == 2) {
           printf("请输入要存入的现金金额");
           scanf("%d", &am);
           account[acc]=(account[acc]+am);
        } else if(acted == 3) {
           printf("账户号码: %d",acc);
           printf("账户余额: %d",account[acc]);
        };
        }
}

0
0 Comments

这段代码的问题是在定义数组元素并将其设置为0时出现了错误。由于数组元素没有值,计算机输出的错误码实际上只是一个随机数。

解决方法是在定义数组时,将其元素初始化为0。可以通过在数组定义时使用大括号来实现,例如int account[10] = { 0 };。

以下是修复后的代码:

#include 
#include 
int main()
{
    int account[10] = { 0 };
    // Tell you the options
    printf("Check balance : 3\r\n");
    printf("Add cash : 2\r\n");
    printf("Remove cash : 1\r\n");
    // Creates a variable for the loop
    int q;
    // Creates a "infinite loop"
    for(q=0;q<100000;++q){
        printf("Select Action\r\n");
        int acted;
        int am;
        int acc;
        scanf("%d", &acted);
        printf("Enter account number\r\n");
        scanf("%d", &acc);
        // Checks what option you chose.
        if (acted == 1) {
           printf("Amount of cash to remove\n");
           scanf("%d", &am);
           account[acc]=(account[acc]-am);
        } else if(acted == 2) {
           printf("Amount of cash to add\n");
           scanf("%d", &am);
           account[acc]=(account[acc]+am);
        } else if(acted == 3) {
           printf("Account Number: %d\n",acc);
           printf("Balance of account: %d\n",account[acc]);
        }
    }
    return 0;
}

修复后的代码中,已经将数组元素初始化为0,解决了出现错误码的问题。

0
0 Comments

为了解决这个问题,你可以按照以下步骤进行操作:

1. 使用`scanf`函数来读取输入的数据,格式为`scanf("%d", &acted);`。具体使用方法可以参考[scanf函数](https://www.educative.io/answers/how-to-read-data-using-scanf-in-c)。

2. 将代码修改为如下形式:

#include 
#include 
int main()
{
    int account[1000];
    // 输出选项
    printf("Check balance : 3\r\n");
    printf("Add cash : 2\r\n");
    printf("Remove cash : 1\r\n");
    
    // 创建循环变量
    int q;
    // 创建一个“无限循环”
    for (q = 0; q < 100000; ++q) {
        printf("Select Action\r\n");
        int acted;
        int am;
        int ACC;
        scanf("%d", &acted);
        printf("Enter account number\r\n");
        scanf("%d", &acc);
        
        // 检查选择的选项
        if (acted == 1) {
           printf("Amount of cash to remove\n");
           scanf("%d", &am);
           account[acc] = (account[acc] - am);
        } else if (acted == 2) {
           printf("Amount of cash to add\n");
           scanf("%d", &am);
           account[acc] = (account[acc] + am);
        } else if (acted == 3) {
           printf("Account Number: %d\n", ACC);
           printf("Balance of account: %d\n", account[ACC]);
        }
    }
}

通过以上操作,你应该能够解决这个问题。

0
0 Comments

注意到你在循环内定义的变量是整数类型:

int acted;
int am;
int acc;

所以,在使用scanf()函数时,你需要指示你正在接收一个整数。现在,使用"%s"你正在指示一个字符串。要接收一个整数,你必须使用"%d""%i"。此外,你忘记了第二个参数前面的&

例如:

scanf("%d", &acted);

之前获取的值是存储在内存中的随机值,因为你的int变量没有被初始化,也就是说你的程序没有给变量分配任何值,因此当你打印该值时,它显示那个随机数字"-1073741819"。

0