C语言 程序停止工作并显示zsh中止

ipakzgxi  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(149)

这是我的代码

#include<math.h>
#include<stdio.h>
#include"hw1.h"

int main (int argc, char *argv[]) {
    int num_choices, k; 
    char right_choices[20];
    
    do {
        printf("Enter number of choices:\n");
        scanf("%d", &num_choices);
    }
    while ((num_choices > 26) || (num_choices < 1));

    num_choices = num_choices - 1 + 'A';
    printf("Max choice:%c\n", (char)num_choices);

    printf("Enter answer key:\n");
        for( k=1; k < 20; k++)
        scanf(" %c", &right_choices[20]);

    return 0;
}

编译时一切看起来都很好。运行第二个scanf时,应该运行20次,但每次都在19次时停止,它说:“zsh中止”
我试着做了10次,看看这是否是问题所在,但在第9次出现了同样的信息。它总是停在n-1。
同样的代码在linux上运行得很完美。
非常感谢!
我查找了这个问题,但没有找到任何有用的信息

ajsxfq5m

ajsxfq5m1#

几乎所有语言中的数组都以相同的方式工作。当你创建foo[20]时,这意味着你的数组看起来像[0][1]...[18][19]
元素right_choices[20]不存在,它应该是right_choices[k]

j91ykkif

j91ykkif2#

C是0索引语言,请将循环更改为

for( k=0; k < sizeof right_choices; k++) {
    scanf(" %c", &right_choices[k]);
}

相关问题