Console C程序停止工作dev c ++

时间:2014-05-11 15:04:18

标签: c arrays structure

我正在练习一系列结构。我做了以下程序,没有编译错误。但是当我尝试运行它时(我猜这些错误被称为运行时错误?),它在接受滚动号后立即停止工作。我想知道我做错了什么。 我使用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);

        }

}

3 个答案:

答案 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);

            }

    }