C - 打印阵列无法正常工作

时间:2015-11-20 12:41:38

标签: c arrays

我正在编写一个关于将学生/学生编号(KAS)/学生姓名插入数组的代码

然后,未知数量的输入将它们打印在最后

  

问题:我的项目问题在于打印效果   印刷中的一些缺陷元素。

我尝试检查输入后输入的每个元素(printf(...)) 一切似乎都很好。

但仍然在输出中有些错误。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int grade[100] , KAS[100] ,x,spots = 0; // KAS = student number
    char name[spots][14], answer;

    printf("Please insert a grade : ");
    scanf("%d", &grade[spots]);    
    getchar();

    printf("Please add a KAS : ");
    scanf("%d",&KAS[spots]);
    getchar();

    printf("Please enter a name : ");
    scanf("%s",&name[spots]);
    getchar();

    printf("\nDo you want to add another value? y/n : ");
    scanf("%c",&answer);
    puts("");
    getchar();

    while(answer == 'y')
    {
        spots++;

            printf("Please insert another grade : ");
            scanf("%d", &grade[spots]);
            getchar();

            printf("Please add another KAS : ");
            scanf("%d",&KAS[spots]);
            getchar();

            printf("Please enter another name : ");
            scanf("%s",&name[spots]);
            getchar();


            printf("\nDo you want to add another value? y/n : ");
            scanf("%c\n",&answer);
            puts("");
            getchar();

            if(answer == 'n') 
            {
                break;
            }
    }
    puts("*****************************");
    for(x = 0; x < spots; x++)
    {
        puts("");
        printf("%d. Student's great : %d\n",x,grade[x]);
        printf("%d. Student's KAS : %d\n",x,KAS[x]);
        printf("%d. Student's name : %s\n",x,name[x]);
    }
    puts("\n*****************************\n");
}

2 个答案:

答案 0 :(得分:2)

char name[spots][14];         //as spots is 0 , it would be name[0][14]
 /* you would end up access invalid memory and cause UB */

您需要将其更改为 -

char name[100][14];

同时在循环内部和循环之前的两个语句中输入 -

scanf("%s",&name[spots]);
           ^ you don't need to use & 

并且在for循环中使用x <= spots作为循环条件。

答案 1 :(得分:0)

你的守则没问题。那里只有一些错误。 1.通过编写static int grade[ ]初始化数组... 2.在getchar陈述之前删除if(answer == 'n')。 3. for循环中的条件应为x <= spots。这就是为什么如果您输入2个学生姓名,它只打印一个学生的姓名/记录。 希望它有所帮助:)