C语言中输出错误的结构
我无论如何都不是C程序员,但多年来一直在使用PHP和Perl。我正在帮助某人使用结构编写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;//
#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行定义charchar 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行定义charchar-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,这个&通常用于什么?