【问题标题】:How to print elements from another function into main function如何将另一个函数中的元素打印到主函数中
【发布时间】:2021-05-12 08:09:37
【问题描述】:

我不知道如何将我的函数中的数组元素打印到主程序中,所以如果有人可以检查此代码并帮助我修复它,我将不胜感激。该程序应该从用户输入中获取数组的长度,然后询问其元素并在之后将它们打印出来。

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

int arrayN(int N) {
    printf("Input array lenght: ");
    scanf("%d",&N);
    
    if(N>2) {
        return N;
    } else {
        return 0;
    }
}

int arrayelements(int array[], int array_length) {
    int loop, i, N;
    
    array_length = arrayN(N);
    
    printf("Enter elements of the array: \n");
    
    for(int i = 0; i < array_length; ++i) {
        scanf("%d", &array[i]);
    }
    
    for(loop = 0; loop < array_length; loop++) {
        printf("%d ", array[loop]);
    }
}

int main() {
    int N, array[], array_length;
    int b = arrayelements(array[], array_length);
    int a = arrayN(N);
    
    printf("Array length is: %d \n", a);
    printf("Elements of array are: %d \n", b);
    
    return 0;
}

【问题讨论】:

  • 一个数组在定义后永远不会改变它的大小;它无法在第 42 行容纳 10 个元素......并且在第 52 行无法容纳 1000 个元素。此外,int array[]; 未指定大小且无效。
  • 您应该在 C 教科书中阅读有关使用 malloc 进行动态内存分配的内容。
  • 我相信您的代码无法编译,原因是:int b = arrayelements( -&gt;array[]&lt;-, array_length);。请修复您的代码,直到它完成,然后再次发布。

标签: arrays c function


【解决方案1】:

我修改了您的示例代码。希望这是你想要的。

重点在于解决数组声明问题、内存分配和 用户输入。

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

int userinput_integer(const char *fmt, ...){
    int N, rv = 0;
    va_list va;
    
    va_start(va, fmt);
    vprintf(fmt, va);
    
    while(1){
        rv = scanf("%d", &N);
        if (1 == rv) break;
        
        printf("Input error! The input >>");
        do{
            rv = fgetc(stdin);
            if (isprint(rv)) putchar(rv);
        }while(rv != EOF && rv != '\n');
        
        printf("<< is not a valid integer.\nPlease try again: ");
    }
    
    va_end(va);
    return N;
}

int userinput_arraylength(void) {
    int N;
    
    N = userinput_integer("Input array lenght: ");
    
    if(N>2) {
        return N;
    } else {
        printf("Invalid length\n");
        
        return 0;
    }
}

int userinput_arrayelements(int *array, int N) {
    printf("Enter elements of the array: \n");
    
    for(int i = 0; i < N; ++i) {
        array[i] = userinput_integer("%d: ", i);
    }

    return N;
}

void print_arrayelements(int *array, int N){
    for(int i = 0; i < N; ++i) {
        printf("%d ", array[i]);
    }
}

int main() {
    int N, *array;
       
    N = userinput_arraylength();
    array = malloc(N * sizeof(*array));
    if (NULL == array){
        printf("Allocation error!\n");
        exit(-1);
    }

    N = userinput_arrayelements(array, N);
    
    printf("Array length is: %d \n", N);
    printf("Elements of array are:\n");
    print_arrayelements(array, N);
    
    free(array);
    
    return 0;
}

【讨论】:

    【解决方案2】:

    首先,数组的声明不正确。 应该是数组[] = {0}

    其次,你不能在arrayN函数之前调用你的数组元素函数,应该先输入数组的大小

    并且在array elements()中不需要调用size函数可以在调用array elements()时直接传递数组的大小

    代码如下:

    #include <stdio.h>  
    #include<malloc.h>  
    int *getarray()  
    {  
        int size;  
        printf("Enter the size of the array : ");  
        scanf("%d",&size);  
        int *p= malloc(sizeof(size));  
        printf("\nEnter the elements in an array");  
        for(int i=0;i<size;i++)  
        {  
            scanf("%d",&p[i]);  
        }  
        return p;  
    }  
    int main()  
    {  
       int *ptr;  
       ptr=getarray();  
       int length=sizeof(*ptr);  
       printf("Elements that you have entered are : ");  
        for(int i=0;ptr[i]!='\0';i++)  
        {  
          printf("%d ", ptr[i]);  
        }  
      return 0;  
    }  
    

    【讨论】:

    • 答案在几个方面是错误的:1.) 将 ptr 声明为 int* 但与 '\0' 进行比较,2.) 长度不是它的 sizeof(int) 数组的长度), 3.) malloc 不考虑数组元素大小和元素计数,只为一个 int 分配空间。 4.) 长度已定义但未使用 5.) getarray 中的指针不指向最后一个元素为零的数组等...
    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 2012-09-25
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    相关资源
    最近更新 更多