【问题标题】:How do you store a user input after calling a void function in C?在 C 中调用 void 函数后如何存储用户输入?
【发布时间】:2023-03-24 00:40:01
【问题描述】:

问题:我正在编写这个程序,它允许用户在从 int 函数调用后通过 fgets() 方法在 void 函数中输入他们的姓名和学校详细信息,我如何确保这个 void 函数中的数组是一个全局数组,然后允许我调用另一个名为 list users 的函数来列出所有用户详细信息?

int main(){

int choice, userEnd =1;
printf("1: list user details\n");
printf("2: add user details \n");
printf("3: end the programme\n");

while(userEnd)
{
    printf("Enter your choice: \n");
    scanf("%d",&choice);
    if(choice==1){
        listUsers();
    }
    if(choice ==2){
        addUsers();
    }
    if(choice ==3){
        userEnd =0;
    }
    
}
return 0;
}

void addUsers(){
    int length = 100;
    char userName[length];
    char className[length];
  
    printf("Enter user name\n");
    fgets(userName,size,stdin);
    printf("Enter className:\n");
    fgets(className,size,stdin);
    printf("User added\n");
    
}

void listUsers(){

/*if addUsers array is empty, print "empty", else print all user details from addUsers.*/
printf("your name is %s, your class is %s",userName, userSize)

}

【问题讨论】:

  • 不要在函数范围内声明变量,而是在所有函数之外。这些变量在全局范围内,并且可以通过全局名称从所有函数中访问。最好为此使用参数和返回值,但我猜你还在学习。
  • 在任何函数之外声明变量,它将在 thaytfile 中是全局的。

标签: c


【解决方案1】:

如果你想声明一个全局数组,你必须在函数范围之外声明它,所以在你的情况下:

/* global array, declared in the global scope */
array_type array[ELEMENTS];

int main () {

}

void addUsers () {

}

void listUsers () {

}

使用该设置,您将能够从每个函数中操作数组。

但是,正如 cmets 中所说,在这种情况下您不应该使用全局变量/数组。相反,您应该使用返回值和参数。

【讨论】:

    【解决方案2】:

    这样的事情就可以了! 请注意,此代码仍然是您想要执行的操作的非工作副本,但只需稍加改动,它应该可以正常工作。

    /* Global vars */
    const int length = 100;
    char *userName[length]; // array of strings
    char *className[length];
    
    /* Keep track of number of users */
    int userCount = 0;
    
    int main(){
    
        int choice, userEnd =1;
        printf("1: list user details\n");
        printf("2: add user details \n");
        printf("3: end the programme\n");
    
        while(userEnd)
        {
            printf("Enter your choice: \n");
            scanf("%d",&choice);
            if(choice==1){
                listUsers();
            }
            if(choice ==2){
                addUsers();
                userCount++;
            }
            if(choice ==3){
                userEnd =0;
            }
            
        }
        return 0;
    }
    
    void addUsers(){
        // TODO: make sure userCount doesn't exceed the length
        // TODO: define size
        printf("Enter user name\n");
        fgets(userName[userCount],size,stdin);
        printf("Enter className:\n");
        fgets(className[userCount],size,stdin);
        printf("User added\n");
        
    }
    
    void listUsers(){
        int i;
    
        /*if addUsers array is empty, print "empty", else print all user details from addUsers.*/
        if (userCount > 0)
        {
            for (i = 0, i < userCount, i++)
            {
                printf("your name is %s, your class is %s",userName[i], className[i]);
            }
        }
        else
        {
            printf("No users registered");
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 2015-04-27
      相关资源
      最近更新 更多