c - 我在重新定义 "fptr"时遇到问题

标签 c syntax scope function-call

第 15 行是我无法修复的。请好心查看我的代码并诊断问题。我是编程新手,非常感谢任何为我指明正确方向的人。

#include <stdio.h>
#include <stdlib.h>

#define TEAMS 200
#define RUNNERS 10000
#define LENGTH 20
#define TEAMSIZE 50

FILE *fptr;
fptr = fopen("myfile.txt","w");
void getdetails();

struct person {
    char name[LENGTH];
    int number;
    int age;
    int event;
    float money;
    float time;
}p;

struct team {
    char tname[LENGTH];
    int nummembers;
    float money;
    struct person members[TEAMSIZE];
}t;

int main() {

    int c,flag=0,i=0,j,k=0;

    printf("\n---------------------------------------------------");
    printf("\n---------------------------------------------------");
    printf("\nHeader Specification");

    while(flag==0) {
        printf("\n1.Individual Registration");
        printf("\n2.Team Registration");
        printf("\n3.Running Events");
        printf("\n4.Donation Totals");
        printf("\n5.Exit");

        printf("\nEnter your choice:");
        scanf("%d",&c);

        switch(c) {
        case 1:
            printf("\n For Individual Registration");
            printf("\n1.Early Registration");
            printf("\n2.regular Registration");
            int ch;

            printf("\nEnter your choice:");
            scanf("%d",&ch);

            switch(ch) {
            case 1: 
                printf("\n For Early Registration");
                i=i+1;
                getdetails(i);
                break;
            case 2: 
                printf("\n For Early Registration");
                i=i+1;
                getdetails(i);
                break;

            default: 
                printf("\n not valid");
                break;
            }
            break;
        case 2:
            printf("\n For Team Registration");

            printf("\n Enter team name:");
            scanf("%s",t.tname);

            printf("\n Enter team participant number:");
            scanf("%d",&t.nummembers);

            k=k+1;

            for(j=1;j<=t.nummembers;j++) {
                getdetails(k);
            }
            break;
        case 5:
            flag=1;
            break;
        }
    }
     return 0;
}

void getdetails(int i) {

    printf("Enter your name:");
    scanf("%s",p.name);

    printf("Enter your age:");
    scanf("%d",&p.age);

    printf("Enter the event:");
    scanf("%d",&p.event);

    printf("Enter the donation amount:");
    scanf("%f",&p.money);

    if(fptr == NULL) {
       printf("Error!");
       exit(1);
    }

    fprintf(fptr,"\n%s register for\t%dk race\tand the number is%d.",p.name,p.event,i);
    fclose(fptr);
}

最佳答案

运行时可执行语句,例如

 fptr = fopen("myfile.txt","w");

不能驻留在全局范围内。它必须驻留在 block 作用域中,即某个函数体中。

关于c - 我在重新定义 "fptr"时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40936636/

相关文章:

c - 有没有办法将字符串数组拆分为 token 上的字符串子数组

c - linux 内核中 pthread_mutex_lock 和 pthread_cond_wait 的等价物

objective-c - 这两种语法类型有什么区别? ( Objective-C )

c# - 避免在字符串的开头和结尾输入双引号

c++ - 在函数的参数列表中初始化的变量的范围

c - 数值积分法、中点、误差、C 代码

c# - 将 C/C++ 宏转换为 C# 中的等效代码

Powershell 点符号与选择对象

java - Java 枚举成员

javascript - 在 oop 语言中使用私有(private)变量/方法的例子是有用的/必要的