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;
}