Я пытаюсь получить одномерный массив, равный указанной строке c из двумерного массива строк. Я приложил свой код и не могу понять, как правильно использовать strncpy
или strcpy
. В моем примере я пытаюсь получить в ColdestLake
название озера, средняя годовая температура которого самая холодная. Я пытаюсь извлечь это из массива названий озер, Lakes[6][12]
. Исходя из математики, это должно быть Озеро Верхнее, поэтому я хочу, чтобы значение «Улучшенное» стало значением ColdestLake
. Я пытаюсь выполнить ту же задачу с WarmestLake
. Я уже написал правильный код для отображения температуры. Я приложил фотографию возвращенного значения (для этого кода c)

Я ценю время, так как я новичок в C программирование.
Обновление: Спасибо всем за помощь! Я новичок в C (учусь в университете), и, к сожалению, мы узнали, что (! Feof (файл)) нужно использовать, и это то, что мне нужно было использовать для этого конкретного проекта. Я обновил свой код, чтобы гарантировать, что значения не являются неопределенными, и определил 365 как Дни. Пожалуйста, дайте мне знать, если есть что-то еще, что я могу улучшить. Спасибо!
Код ниже:
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <float.h>
#define Days 365
int main ()
{
//Variable Declaration
char Lakes[6][12] = {"Superior", "Michigan", "Huron", "Erie", "Ontario", "St. Claire"};
char ColdestLake[12] = {""};
char WarmestLake[12] = {""};
char AboveAverageLakes[6][12] = {"","","","","",""};
char BelowAverageLakes[6][12] = {"","","","","",""};
double Sums[7] = {0,0,0,0,0,0,0};
double Averages[7] = {0,0,0,0,0,0,0};
double Superior[Days];
double Michigan[Days];
double Huron[Days];
double Erie[Days];
double Ontario[Days];
double St_Claire[Days];
double ColdestTemperature;
double WarmestTemperature;
FILE *input;
int i;
int j;
int AboveAverageCount = 0;
int BelowAverageCount = 0;
//Initializing The Input Data File
input = fopen("Lake Data.txt", "r");
//Assigning Data From File To Array's Of Each Lake
while (!feof(input))
{
for (i = 0; i < 365; i++)
{
fscanf(input, "%*lf %*lf %lf %lf %lf %lf %lf %lf", &Superior[i], &Michigan[i], &Huron[i], &Erie[i], &Ontario[i], &St_Claire[i]);
}
}
//Getting Sum Of Each Lake's Temperature
for (i = 0; i < Days; i++)
{
Sums[0] += Superior[i];
Sums[1] += Michigan[i];
Sums[2] += Huron[i];
Sums[3] += Erie[i];
Sums[4] += Ontario[i];
Sums[5] += St_Claire[i];
for (j = 0; j < 6; j++)
{
Sums[6] += Sums[j];
}
}
//Getting Average Of Each Lake's Temperature
Averages[0] = Sums[0]/Days;
Averages[1] = Sums[1]/Days;
Averages[2] = Sums[2]/Days;
Averages[3] = Sums[3]/Days;
Averages[4] = Sums[4]/Days;
Averages[5] = Sums[5]/Days;
//Getting Average Of All Lakes
for (i = 0; i < 6; i++)
{
Averages[6] += Averages[i]/6;
}
//Printing Average Of Each Lake's Temperature
for (i = 0; i < 6; i++)
{
printf("The Average For Lake %s Was %.2lf Degrees Celsius.\n",Lakes[i], Averages[i]);
}
//Printing The Average Of All The Lakes
printf("\nThe Average Of All The Lakes Was %.2lf Degrees Celsius.\n", Averages[6]);
//Calculating Warmest And Coldest Lakes
ColdestTemperature = DBL_MAX;
WarmestTemperature = DBL_MIN;
for (i = 0; i < 6; i++)
{
//Getting Coldest Temperature & Lake
if (Averages[i] < ColdestTemperature)
{
ColdestTemperature = Averages[i];
strcpy(ColdestLake, Lakes[i]);
}
//Getting Warmest Temperature & Lake
if (Averages[i] > WarmestTemperature)
{
WarmestTemperature = Averages[i];
strncpy(WarmestLake, Lakes[i], 12);
}
//Counting Lakes Above Average Temperature
if (Averages[i] > Averages[6])
{
AboveAverageCount++;
strncpy(AboveAverageLakes[i], Lakes[i], 12);
}
//Counting Lakes Below Average Temperature
if (Averages[i] < Averages[6])
{
BelowAverageCount++;
strncpy(BelowAverageLakes[i], Lakes[i], 12);
}
}
//Printing Warmest And Coldest Lakes
printf("\nThe Coldest Lake Was %s With A Temperature Of %.2lf Degrees Celsius.\n", ColdestLake, ColdestTemperature);
printf("The Warmest Lake Was %s With A Temperature Of %.2lf Degrees Celsius.\n", WarmestLake, WarmestTemperature);
//Printing How Many Lakes Are Below Average Temperature
printf("\nThere Are %d Lakes Below The Average Of All The Lakes. They Are:\n", BelowAverageCount);
for (i = 0; i < 6; i++)
{
if (strcmp(BelowAverageLakes[i],"") == 0)
{
continue;
}
printf("Lake %s\n", BelowAverageLakes[i]);
}
//Printing How Many Lakes Are Above Average Temperature
printf("\nThere Are %d Lakes Above The Average Of All The Lakes. They Are:\n", AboveAverageCount);
for (i = 0; i < 6; i++)
{
if (strcmp(AboveAverageLakes[i],"") == 0)
{
continue;
}
printf("Lake %s\n", AboveAverageLakes[i]);
}
return(0);
}