-2

编译时出现错误:预期的)和(在c中用于以下程序:

    #include<stdio.h>
    #include<conio.h>
    struct student
    {
        char name[20];
        int rollno;
        int age;
        char classes[10];
    };
    void printdata(struct student &sob); //getting error in this line
    void main()
    {
        struct student stud;
        clrscr();
        printf("enter student details:");
        printf("\nenter student name:"); fflush(stdin);
        gets(stud.name);
        printf("\nenter age:");
        scanf("%d",&stud.age);
        printf("\nenter rollno:");
        scanf("%d",&stud.rollno);
        printf("\nenter class of student:"); fflush(stdin);
        gets(stud.claases);
        printdata( &stud);
        getch();
    }
    void printdata(struct student &sob) //getting error in this line
    {
        struct student *ptr;
        ptr=sob;
        printf("student details are as follows:");
        printf("\nstudent's name:"); fflush(stdout);
        puts(ptr->name);
        printf("\n student' age:%d",ptr->age);
        printf("\n student's roll no:%d",ptr->rollno);
        printf("\n student's class:"); fflush(stdout);
        puts(ptr->classes);
    }

是我已经声明了结构学生,那么为什么它在两行中给我错误(和)..

4

4 回答 4

1

你打错了:

gets(std.claases); // it's std.classes

printdata() 参数应该是“struct student *sob”。

该解决方案应该有效:

#include <stdio.h>

struct student {
    char name[20];
    int rollno;
    int age;
    char classes[10];
};

void printdata(struct student *sob);

int main(void) {
    struct student stud;
    printf("enter student details:");
    printf("\nenter student name:");
    fflush(stdin);
    gets(stud.name);
    printf("\nenter age:");
    scanf("%d", &stud.age);
    printf("\nenter rollno:");
    scanf("%d", &stud.rollno);
    printf("\nenter class of student:");
    fflush(stdin);
    gets(stud.classes);
    printdata(&stud);
    return 0;
}

void printdata(struct student *sob)
{
    struct student *ptr;
    ptr = sob;
    printf("student details are as follows:");
    printf("\nstudent's name:");
    fflush(stdout);
    puts(ptr->name);
    printf("\n student' age:%d", ptr->age);
    printf("\n student's roll no:%d", ptr->rollno);
    printf("\n student's class:");
    fflush(stdout);
    puts(ptr->classes);
}

顺便说一句,主函数必须返回一个整数,这是一个标准。

于 2013-08-07T08:55:04.250 回答
1
  • struct student &不是有效的 C。它似乎是 C++ 代码。
  • void main()不是有效的 C (除非程序是独立的程序,而这个程序显然不是)。
  • 根据 C11 标准,gets() 函数已从 C 语言中删除。
  • fflush(stdin)是未定义的行为。

无关,您的代码很难阅读。养成在不同函数和声明之间添加一些空行的习惯。

不相关的是,您似乎正在使用 Turbo C for DOS 或同样糟糕且非标准的东西。不要使用这些旧的垃圾编译器,使用糟糕的编译器是所有这些问题的根源之一。

于 2013-08-07T08:54:52.140 回答
0

你的函数printData应该接受一个指针struct student *obnot struct student &ob

于 2013-08-07T08:50:08.170 回答
0

C 中没有引用(就像在 C++ 中一样)。更改函数原型和定义以将指针作为参数。

改变

void printdata(struct student &sob); //getting error in this line

void printdata(struct student *sob); //getting error in this line

和改变

void printdata(struct student &sob) //getting error in this line

void printdata(struct student *sob) //getting error in this line

其他问题是:

  1. 您拼错了成员名称:gets(stud.claases);应该是:gets(stud.classes);
  2. 不要使用gets(). 改用fgets()asgets()不安全并导致缓冲区溢出问题。
  3. fflush(stdin);是 C 中未定义的行为。
于 2013-08-07T08:50:29.030 回答