c - 将 main 拆分为一个函数

标签 c function

这是我的代码:

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

int main()
{
        char c, *data, *temp;
        data=malloc(sizeof(char));
        int i, conta=0;
        printf("Write hostname: ");
        for (i=0;;i++) {
            c=getchar();
            conta++;
            if (c=='\n') break; /* Se premo invio esco dal ciclo */
            data[i]=c; /* Inserisco il carattere nell'array */
            temp=realloc(data,(i+2)*sizeof(char)); /* do memoria aggiuntiva al puntatore (+2 per carattere NUL) */
            if ( temp != NULL ) {
                    data=temp; /* Se la riallocazione va a buon fine assegno temp a data */
            } else {
                    free(data); /* altrimenti libero il puntatore, stampo messaggio errore e chiudo programma */
                    printf("Error allocating memory!\n");
                    return EXIT_FAILURE;
            }    
        }
    /* Stampo la stringa letta, libero puntatore e chiudo programma */
    for (i=0;i<=conta;i++){
            printf("%c", data[i]);
        }
        printf("\n");
        free(data);
        return EXIT_SUCCESS;
}

我想将我的 main 分成一个函数来获取用户输入(主机名、用户名)。
我想要这样的东西:

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

function read_input();

int main()
{
    printf("Write hostname: ");
    read_input();
    printf("Write username: ");
    read_input();
    for (i=0;i<=conta;i++){
      printf("%c", data[i]);
    }
    printf("\n");
    free(data);
    return EXIT_SUCCESS;
}

read_input(){
....
}

但我不知道如何开始实现这个功能...
我不知道如何创建一个函数,该函数将返回 conta (对于 for cicle)、指针 data (必须释放它并且需要打印输出)。
我必须创建一个结构并将其传递给函数的返回值吗?

最佳答案

您可以这样组织代码:

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

int read_input(char data[]);

int main()
{
    char *data;
    int i, conta;
    data=malloc(sizeof(char));
    printf("Write hostname: ");
    conta = read_input(data);
    /* Stampo la stringa letta, libero puntatore e chiudo programma */
    for (i=0;i<=conta;i++){
        printf("%c", data[i]);
    }
    printf("\n");
    free(data);
    return EXIT_SUCCESS;
}

int read_input(char data[])
{
    char c, *temp;
    int i, conta = 0;
    for (i=0;;i++) {
        c=getchar();
        conta++;
        if (c=='\n') break; /* Se premo invio esco dal ciclo */
        data[i]=c; /* Inserisco il carattere nell'array */
        temp=realloc(data,(i+2)*sizeof(char)); /* do memoria aggiuntiva al puntatore (+2 per carattere NUL) */
        if ( temp != NULL ) {
                data=temp; /* Se la riallocazione va a buon fine assegno temp a data */
        } else {
                free(data); /* altrimenti libero il puntatore, stampo messaggio errore e chiudo programma */
                printf("Error allocating memory!\n");
                return EXIT_FAILURE;
        }
    }
    return conta;
}

关于c - 将 main 拆分为一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10451827/

相关文章:

CLion 错误 : Configuration is not specified

c - ds_list 不能处理超过 3 个元素

c - 系统调用: Interpreting ktrace output

MySQL 函数 ONLY_NUMBERS

javascript - jQuery/Javascript 将函数绑定(bind)到窗口/文档而不指定事件

css - 动画关键帧的 scss 函数

function - 包装到带有进度条的FOR循环

C 计算句子中每个单词的元音

c - 这是删除 C 中链表的正确方法吗?

javascript - 使用 JavaScript 函数将页码从一个 PHP 文件传递​​到另一个 PHP 文件