主程序调试中的clrscr错误

时间:2015-05-04 18:08:26

标签: c debugging fflush

我收到了clrscr();函数main中的错误,但我认为在使用fflush(stdin);时我必须清除?

我觉得我在这里错过了一些简单的东西,但是如果有人可以放弃一些像我会欣赏的那样!

#include<stdio.h>
#include<conio.h>
#include<string.h>

struct person
{
        char name[10];
        int age;
};
typedef struct person NAME;
NAME  stud[10], temp[10];

void main()
{
     int no,i;

     void sort(int N);  /* Function declaration */

     clrscr();
     fflush(stdin);

     printf("Enter the number of students in the list\n");
     scanf("%d",&no);

     for(i = 0; i < no; i++)
     {
         printf("\nEnter the name of  person %d : ", i+1);
         fflush(stdin);
         gets(stud[i].name);

         printf("Enter the age of %d : ", i+1);
         scanf("%d",&stud[i].age);
         temp[i] = stud[i];
     }

     printf("\n*****************************\n");
     printf ("     Names before sorting     \n");
     /* Print the list of names before sorting */
     for(i=0;i<no;i++)
     {
            printf("%-10s\t%3d\n",temp[i].name,temp[i].age);
     }

     sort(no);       /* Function call */

     printf("\n*****************************\n");
     printf ("     Names after sorting     \n");
     printf("\n*****************************\n");
     /* Display the sorted names */
     for(i=0;i<no;i++)
     {
            printf("%-10s\t%3d\n",stud[i].name,stud[i].age);

     }
     printf("\n*****************************\n");
}          /* End of main() */

/* Function to sort the given names */
void sort(int N)
{
         int i,j;
         NAME temp;

         for(i = 0; i < N-1;i++)
         {
                for(j = i+1; j < N; j++)
                {
                    if(strcmp(stud[i].name,stud[j].name) > 0 )
                    {
                        temp    = stud[i];
                        stud[i] = stud[j];
                        stud[j] = temp;
                    }
                }
         }
}       /* end of sort() */

2 个答案:

答案 0 :(得分:2)

  1. 将函数原型void sort(int N);放在main()
  2. 之外
  3. 您没有(但可以)在clrscr()之前执行fflush(stdin)。在这种情况下,屏幕内容(您要清除的内容)与stdin无关。
  4. 您可以阅读有关fflush()的更多信息以及使用它的动机,here

答案 1 :(得分:2)

我假设您收到编译错误。它是由您看到错误的行上方的行引起的。

正如@Catalyst所建议的那样,这是由

行引起的
void sort(int N);  /* Function declaration */`

因为C不允许在其他函数内部声明函数(并且main 是函数)。

你可以这样简单地解决它:

#include<stdio.h>
#include<conio.h>
#include<string.h>

struct person
{
        char name[10];
        int age;
};
typedef struct person NAME;
NAME  stud[10], temp[10];

void sort(int N);  /* Function declaration */


int main()    // void main is incorrect
{
     int no,i;

     clrscr();
     fflush(stdin);
...

另请注意int main()而不是void main()。它在Windows上无害,但仍然不正确。