C 将值读入数组失败

C 将值读入数组失败,c,C,我想使用一个函数来scanf对一个大小为10的数组进行最多10个值的扫描,并跟踪数组中的值的数量,因为我以后需要它来解决有关数组的一些数学问题(最大值、最小值等) #包括 int enter(int MEASUREMENTDATA[],int NROFMEASUREMENTS) { 对于(int i=0;i而言,您的代码中存在一些错误。我将尝试解释。您过度声明变量的次数太多了。由于您有一个固定的循环,您不需要计算度量值,您将始终读取10个度量值 下面是经过一些修改的代码。请随意询问有关它的任何信

我想使用一个函数来
scanf
对一个大小为10的数组进行最多10个值的扫描,并跟踪数组中的值的数量,因为我以后需要它来解决有关数组的一些数学问题(最大值、最小值等)

#包括
int enter(int MEASUREMENTDATA[],int NROFMEASUREMENTS)
{

对于(int i=0;i而言,您的代码中存在一些错误。我将尝试解释。您过度声明变量的次数太多了。由于您有一个固定的循环,您不需要计算度量值,您将始终读取10个度量值

下面是经过一些修改的代码。请随意询问有关它的任何信息

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

#define MAXIMUM_MEASURMENT 10

int enter(int MeasurmentData[])
{   
    char input[100];
    int nrMeasurement = 0;

    // reseting Measurment data
    for(int i=0;i<MAXIMUM_MEASURMENT;++i) MeasurmentData[i] = 0;

    for(int i=0;i<MAXIMUM_MEASURMENT;++i) 
    {
        scanf("%99s", input);
        if(strcmp(input, "q") == 0) {
            break;
        }
        MeasurmentData[i] = (int) strtol(input, (char **)NULL, 10);
        nrMeasurement++;
    }

    return nrMeasurement;
}

void showMeasurments(int* MeasurmentData, int length) {
    int i = 0;

    printf(" ======== Measurment ======== \n");

    for(i = 0; i < length; i++) {
        printf("%d ", MeasurmentData[i]); 
    }

    printf("\n");
}

int main()
{
    int MeasurmentData[MAXIMUM_MEASURMENT];
    int nrOfmeasurments;
    char menuoption;

    while (1) 
    {
        printf("Measurment tool 2.0\n" "v (View)\n" "e (Enter)\n" "c (Compute)\n" "r (Reset)\n" "q (Quit)\n enter your option:\n");

        scanf(" %c", &menuoption);

        if (menuoption =='e') // enter values
        {
            enter(MeasurmentData);
        }
        else if(menuoption == 'v') // view values
        {
            // show
            showMeasurments(MeasurmentData, MAXIMUM_MEASURMENT);
        }
        else if(menuoption == 'c')
        {

        }
        if(menuoption == 'q')
        {
            printf("Exiting Measurment tool 2.0\n");
            break; 
        }
    }

    return 0;
}
#包括
#包括
#包括
#定义最大测量值10
输入整数(整数度量数据[])
{   
字符输入[100];
int nr测量=0;
//重置测量数据

对于(int i=0;我愿意!但你的问题是什么?作为一名新的贡献者,你可能会受益于阅读,并且你正在for循环的范围内重新定义
measurementdata
。你可能不想这样做。你仍然没有问问题,也没有阅读我建议的链接。它应该做什么,输入是什么,期望是什么d输出和实际输出?说“它不工作”不是有用的信息。请向我们提供一些输入和预期输出。也请向我们提供实际输出。我看到一些关于
c
工作原理的误解。当程序中的所有内容都“奇怪”时,很难指出错误。好的是你似乎已经掌握了“Hello World”。但我建议你重新阅读
c
课本中紧随其后的内容。我已经解决了所有问题,但我还有一个问题。我将while循环改为while(菜单选项!=“q”)但是当我输入e时,它不使用我的函数扫描输入值,它只是打印出测量工具bla blaOT:about:
scanf(“%s”,&input);
1)始终检查返回值(而不是参数值)以确保操作成功。在这种情况下,除1之外的任何返回值都表明发生了错误。2)使用“%s”和或“%[…]”时,始终包含比输入缓冲区长度小1的最大字符修饰符,因为这些说明符总是向输入追加NUL字节。这还可以避免缓冲区溢出和随之而来的未定义行为。关于:
scanf(“%c”,&menuoption);
格式字符串“%c”应该是:“%c”,因此任何剩余的空白(如换行符)都将被占用
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXIMUM_MEASURMENT 10

int enter(int MeasurmentData[])
{   
    char input[100];
    int nrMeasurement = 0;

    // reseting Measurment data
    for(int i=0;i<MAXIMUM_MEASURMENT;++i) MeasurmentData[i] = 0;

    for(int i=0;i<MAXIMUM_MEASURMENT;++i) 
    {
        scanf("%99s", input);
        if(strcmp(input, "q") == 0) {
            break;
        }
        MeasurmentData[i] = (int) strtol(input, (char **)NULL, 10);
        nrMeasurement++;
    }

    return nrMeasurement;
}

void showMeasurments(int* MeasurmentData, int length) {
    int i = 0;

    printf(" ======== Measurment ======== \n");

    for(i = 0; i < length; i++) {
        printf("%d ", MeasurmentData[i]); 
    }

    printf("\n");
}

int main()
{
    int MeasurmentData[MAXIMUM_MEASURMENT];
    int nrOfmeasurments;
    char menuoption;

    while (1) 
    {
        printf("Measurment tool 2.0\n" "v (View)\n" "e (Enter)\n" "c (Compute)\n" "r (Reset)\n" "q (Quit)\n enter your option:\n");

        scanf(" %c", &menuoption);

        if (menuoption =='e') // enter values
        {
            enter(MeasurmentData);
        }
        else if(menuoption == 'v') // view values
        {
            // show
            showMeasurments(MeasurmentData, MAXIMUM_MEASURMENT);
        }
        else if(menuoption == 'c')
        {

        }
        if(menuoption == 'q')
        {
            printf("Exiting Measurment tool 2.0\n");
            break; 
        }
    }

    return 0;
}