C语言中输出错误的结构

C语言中输出错误的结构,c,structure,C,Structure,我无论如何都不是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;//

我无论如何都不是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");

}
我不知道为什么它会给出这个结果,并将感谢任何帮助

谢谢


Steve

您正在使用
字符[100]
存储课程代码,并且您正在使用
%d
格式化程序请求int

您可以按照注释中的建议要求使用
%s
%99s
字符串,或者如果您的coursecode只是一个int,您可以将coursecode属性设置为int。

您正在使用
字符[100]
存储您的课程代码,并且您要求使用
%d
格式设置器输入int

您可以按照注释中的建议,要求使用
%s
%99s
字符串,或者如果您的coursecode只是一个int,您可以将coursecode属性设置为int。

您的课程代码声明为一个char数组,
char coursecode[100]
。因此,

scanf("%d",&stud[z].coursecode);
不应使用
“%d”
格式说明符,您也不需要
(的地址)运算符。做

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

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

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

scanf("%d",&stud[z].coursecode);
不应使用
%d”
格式说明符,您也不需要
&
(的地址)运算符。是否

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

相反,
99
用于限制输入,
%s
用于将输入读取到字符数组中。对
scanf(“%s”和&stud[z].coursename)也要这样做;
以便它读取
scanf(“%9s”,stud[z].coursename);
。您还应该更改
printf
以使用
“%s
格式说明符。

在第7行定义char
char coursecode[100]
数组(用作字符串类型)

首先,当您使用:
scanf(“%d”,&stud[z].coursecode)
读取输入时,您需要的是int变量

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

您有两种可能的解决方案,具体取决于您对
课程编码的要求:

(一) 您可以在scanf和printf中使用
%s
(与使用coursename[]的方式相同), 因此,您的代码将发生更改:

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

printf(“%s%s\n”,stud[z]。coursename,stud[z]。coursecode)(可能使用
\t
作为间距)

这样,您就可以将课程代码视为一个“字符串”


2) 您将您的
char-coursecode[100]
声明为
int-coursecode
,并在第7行定义char
char-coursecode[100]
数组(用作字符串类型)

首先,当您使用:
scanf(“%d”,&stud[z].coursecode)
读取输入时,您需要的是int变量

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

您有两种可能的解决方案,具体取决于您对
课程编码的要求:

(一) 您可以在scanf和printf中使用
%s
(与使用coursename[]的方式相同), 因此,您的代码将发生更改:

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

printf(“%s%s\n”,stud[z]。coursename,stud[z]。coursecode)(可能使用
\t
作为间距)

这样,您就可以将课程代码视为一个“字符串”


2) 将
char coursecode[100]
声明为
int coursecode
,并在结构中保持scanf和printf相同,表示coursecode是一个字符。但随后您将其引用为%d,就像它是一个整数一样。将其更改为%s,并且在您的结构中,您已经指示coursecode是一个字符。但随后您将其引用为%d,就像它是一个整数一样。将其更改为%s,然后打开编译器警告(
-Wall-Wextra
用于gcc和clang)。哇,谢谢。将扫描频率从%d更正为%s,即可正常工作@用户3121023,&通常用于什么?打开编译器警告(
-Wall-Wextra
用于gcc和clang)。哇,谢谢。将扫描频率从%d更正为%s,即可正常工作@user3121023,这个&通常用于什么?