C中提供错误输出的结构

问题描述 投票:1回答:4

我无论如何都不是C程序员,但是已经使用PHP和Perl多年了。我正在协助使用结构的C程序的人。

我有以下代码-

#include<stdlib.h>
#include<stdio.h>
#define size 2
#define max 2

struct student   //initialising...
{
    char coursecode[100];
    char coursename[10];
};

main()
{
    int i,z;//for the loops

    struct student stud[10];


    printf("Enter available course name and their corresponding codes\n");

    for(z=0;z<max;z++)
    {
        printf("Course Name:  ");
        scanf("%s",&stud[z].coursename);
        printf("Course Code:  ");
        scanf("%d",&stud[z].coursecode);
        printf("-----INFORMATION RECORDED-----\n");
        printf("\n");

    }
    printf("\n");
    printf("SUBJECTS");
    printf("\n");
    printf("\n");
    for(z=0;z<max;z++) // Prints them back to the screen
        {
            printf("%s               %d\n",stud[z].coursename, stud[z].coursecode);
            printf("\n");
        }


    printf("\n");
    printf("\n");

}

我得到以下输出

Enter available course name and their corresponding codes
Course Name:  Art
Course Code:  101
-----INFORMATION RECORDED-----

Course Name:  Biology
Course Code:  102
-----INFORMATION RECORDED-----


SUBJECTS

Art               6485496

Biology               6485704




--------------------------------
Process exited after 7.501 seconds with return value 0
Press any key to continue . . .```

不确定为什么会给出此结果,将不胜感激。

谢谢

史蒂夫

c structure
4个回答
0
投票

您正在使用char[100]存储课程代码,并且正在使用%d格式化程序要求输入整数!您可以按照注释中的建议,使用%s%99s来请求一个字符串,或者如果您的课程代码只是一个int,则可以将coursecode属性设为一个int。


0
投票

您的课程代码被声明为字符数组char coursecode[100]。因此,在

scanf("%d",&stud[z].coursecode);

不应该使用"%d"格式说明符,并且您也不需要&(的地址)运算符。做

scanf("%99s",stud[z].coursecode);

相反,其中99用于限制输入,"%s"用于将输入读取到char数组中。也对scanf("%s",&stud[z].coursename);执行此操作,以使其读取scanf("%9s",stud[z].coursename);。您还应该更改printf以改为使用"%s格式说明符。


0
投票

在第7行,您定义了一个char char coursecode[100]数组(用作String类型)。

首先,当您读取带有scanf("%d",&stud[z].coursecode)的输入时,您要输入int变量

然后您再次使用用于%d类型变量的int打印

您有两种可能的解决方案,具体取决于您想要coursecode的方式:

1)您可以在scanf和printf中改用%s(与Coursename []相同),因此您的代码将更改:

scanf("%s",&stud[z].coursecode)

[printf("%s %s\n",stud[z].coursename, stud[z].coursecode);(也许使用\t作为间隔)]

这样,您将课程代码视为“字符串”。

OR

2)您将char coursecode[100]声明为int coursecode,并保持scanf和printf相同


0
投票

在您的结构中,您已经指出课程代码是一个字符。但是随后您将其引用为%d,就好像它是整数一样。将其更改为%s,非常好]

© www.soinside.com 2019 - 2024. All rights reserved.