我正在练习一系列结构。我做了以下程序,没有编译错误。但是当我尝试运行它时(我猜这些错误被称为运行时错误?),它在接受滚动号后立即停止工作。我想知道我做错了什么。 我使用Dev c ++和gcc编译器。 这是代码:
#include<stdio.h>
struct student{
char Fname[];
char Lname[];
int reg_no;
int Class;
char sec;
};
void enterinfo(student *,int);
void Display(student *,int);
int main()
{
int i;
printf("\t\t\t Enter student's information\n\n\n\n");
printf("How many students are there in you're school: ");
scanf("%d",&i);
student ob[i],*ptr;
ptr=ob;
enterinfo(ptr,i);
Display(ptr,i);
}
void enterinfo(student *e,int y)
{
char CONT='y';
for (int j=0;j<y && (CONT=='y' || CONT=='Y');j++)
{
printf("Enter Students First Name: ");
scanf("%s",e->Fname);
printf("Enter Students Last Name: ");
scanf("%s",e->Lname);
printf("Enter Roll number: ");
scanf("%d",e->reg_no);
printf("Enter class: ");
scanf("%d",e->Class);
printf("Enter Section: ");
scanf("%d",e->sec);
printf("\n\n\n\n Do you want to enter more? : ");
scanf("%c",&CONT);
}
}
void Display(student *e,int y)
{
char CONT='y';
for (int j=0;j<y;j++)
{
printf("Students name : %s %s",e->Fname,e->Lname);
printf("Enter Roll number: %d",e->reg_no);
printf("class: %d",e->Class);
printf("Enter Section: %d",e->sec);
}
}
答案 0 :(得分:1)
我对您的代码进行了以下更改,它开始为我工作:
char Fname[];
- &gt; char Fname[100];
char Lname[];
- &gt; char Lname[100];
char sec;
- &gt; int sec;
这是scanf。scanf("%d",e->reg_no);
- &gt; scanf("%d",&e->reg_no);
scanf("%d",e->Class);
- &gt; scanf("%d",&e->Class);
scanf("%d",e->sec);
- &gt; scanf("%d",&e->sec);
\n
添加到printf
Display
个字符串的末尾
请注意scanf("%s", ...)
是不安全的,它可能导致输入字符串比您正在读取它的数组大小更长的崩溃,即如果用户键入至少100个字节的名称。
请注意,您应该始终检查scanf
的返回值,并在出现错误时提前中止(例如,如果您的案例中没有返回1
)。
请注意,在C ++中,istream
方法(http://en.cppreference.com/w/cpp/header/istream)提供了一种更安全的方式来读取输入。
答案 1 :(得分:0)
下面:
scanf("%d",e->reg_no);
你应该插入&#39;&amp;&#39; e-&gt; reg_no之前的符号。但是一旦你解决了这个问题我就会看到许多其他问题......
答案 2 :(得分:0)
你可以使用下面的代码,它将在linux和amp;视窗。您的程序因以下原因而停止:
scanf("%d",&e->reg_no);
printf("Enter class: ");
scanf("%d",&e->Class);
printf("Enter Section: ");
scanf("%d",&e->sec);
你没有使用&amp;这对于int,char,float数据类型是必须的,因为它被用作变量的引用。
#include
struct student{
char Fname[30];
char Lname[30];
int reg_no;
int Class;
char sec[5];
};
void enterinfo(student *,int);
void Display(student *,int);
int main()
{
int i;
printf("\t\t\t Enter student's information\n\n\n\n");
printf("How many students are there in you're school: ");
scanf("%d",&i);
student * ob = new student[i];
enterinfo(ob,i);
Display(ob,i);
}
void enterinfo(student *e,int y)
{
char CONT='y';
for (int j=0;jFname);
printf("Enter Students Last Name: ");
scanf("%s",e->Lname);
printf("Enter Roll number: ");
scanf("%d",&e->reg_no);
printf("Enter class: ");
scanf("%d",&e->Class);
printf("Enter Section: ");
scanf("%s",e->sec);
getchar();//to eat newline/ enter char of previous statement
printf("\n\n\n\n Do you want to enter more? : ");
scanf("%c",&CONT);
}
}
void Display(student *e,int y)
{
for (int j=0;jFname,e->Lname);
printf("\nEnter Roll number: %d",e->reg_no);
printf("\nclass: %d",e->Class);
printf("\nEnter Section: %s\n",e->sec);
}
}