C语言 更好的方法?(将字符串放在结构中的堆栈中)



所有代码都有效,我只需要找到一种更好(或至少不同(的方法:

该程序应使用户能够输入 10 个温度的空气。 温度存储在通过阵列实现的堆栈中。 需要有一个函数"checkTemperature"(代码:provjeriTemperature(,它将接收一个包含温度的堆栈,并在其中将值"check"/"review"(代码中:provjeri(设置为"正"或"负" 函数调用后,程序应打印有关温度值的信息,以及它是正数还是负数,并在最后制作简单的温度平均值。

现在,我已经完成了所有这些工作,但您可以在代码中看到看起来很卡顿的部分(这是爬行的楼梯(。

#include <string>
#include<conio.h>
#include<stdio.h>
#define MAX 10
/*typedef struct{
float temperature[10];
char provjera[30];
} Temper;

typedef struct{
int vrh;
Temper elementi[MAX];
} Stog;
*/
typedef struct{ 
int vrh;
float temperature[10];
char provjera[10][9];
} Stog;

void ubaci (float x, Stog *pokStog){
if (pokStog->vrh == 0)
printf("Stack is full!");
else {
pokStog->vrh--;
pokStog->temperature[pokStog->vrh] = x;
}}

void provjeriTemperature (Stog *pokStog){
int indeks1;
int indeks2;
float avg=0;
float sum=0;
printf("nStack:n");
for(indeks1=pokStog->vrh; indeks1<=MAX-1; indeks1++){
if(pokStog->temperature[indeks1]<0){

pokStog->provjera[indeks1][0]='n';
pokStog->provjera[indeks1][1]='e';
pokStog->provjera[indeks1][2]='g';
pokStog->provjera[indeks1][3]='a';
pokStog->provjera[indeks1][4]='t';
pokStog->provjera[indeks1][5]='i';
pokStog->provjera[indeks1][6]='v';
pokStog->provjera[indeks1][7]='n';
pokStog->provjera[indeks1][8]='a';
}
else{
pokStog->provjera[indeks1][0]='p';
pokStog->provjera[indeks1][1]='o';
pokStog->provjera[indeks1][2]='z';
pokStog->provjera[indeks1][3]='i';
pokStog->provjera[indeks1][4]='t';
pokStog->provjera[indeks1][5]='i';
pokStog->provjera[indeks1][6]='v';
pokStog->provjera[indeks1][7]='n';
pokStog->provjera[indeks1][8]='a';
}
sum+=pokStog->temperature[indeks1]; 
}

for(indeks2=pokStog->vrh; indeks2<=MAX-1; indeks2++){
printf("%.2f    ", pokStog->temperature[indeks2]);
for(int indeks3=0;indeks3<9;indeks3++){
printf("%c",pokStog->provjera[indeks2][indeks3]);   
}
printf("n");
}
avg=sum/10;
printf("n Prosjecna temperatura je: %.2f",avg);
}
main(){
/*Temper unos;
Stog mojStog;
mojStog.vrh=MAX;
printf("n Unesite 10 temperatura: ");
for(int i=0;i<MAX;i++){
printf("n %d. temperatura iznossi: ",i+1);
scanf("%f", &unos.temperature);
provjeriTemperature(unos,&mojStog);
}
ispis(&mojStog);
*/
Stog mojStog;
mojStog.vrh=MAX;
float temperature;
printf("n Enter 10 temperatures: ");
for(int i=0;i<MAX;i++){
printf("n %d. temperature is: ",i+1);
scanf("%f", &temperature);
ubaci(temperature,&mojStog);
}
provjeriTemperature(&mojStog);
}

对于这种代码:

pokStog->provjera[indeks1][0]='n';
pokStog->provjera[indeks1][1]='e';
pokStog->provjera[indeks1][2]='g';
pokStog->provjera[indeks1][3]='a';
pokStog->provjera[indeks1][4]='t';
pokStog->provjera[indeks1][5]='i';
pokStog->provjera[indeks1][6]='v';
pokStog->provjera[indeks1][7]='n';
pokStog->provjera[indeks1][8]='a';

必须更好地使用:

strncpy( pokStog->provjera[indeks1], "negativna", 9);

但是,我希望您想要一个字符字符串,因此建议更改:

char provjera[10][9];

char provjera[10][10];

为了给终止 NUL 字节留出空间,可以将代码减少到:

strcpy( pokStog->provjera[indeks1], "negativna" );

类似的注意事项如下:

pokStog->provjera[indeks1][0]='p';
pokStog->provjera[indeks1][1]='o';
pokStog->provjera[indeks1][2]='z';
pokStog->provjera[indeks1][3]='i';
pokStog->provjera[indeks1][4]='t';
pokStog->provjera[indeks1][5]='i';
pokStog->provjera[indeks1][6]='v';
pokStog->provjera[indeks1][7]='n';
pokStog->provjera[indeks1][8]='a';

减少到:

strcpy( pokStog->provjera[indeks1], "pozitivna" );

如果遵循上述建议,则:

for(int indeks3=0;indeks3<9;indeks3++)
{
printf("%c",pokStog->provjera[indeks2][indeks3]);   
}

可以减少到:

printf( "%sn", pokStog->provjera[indeks1] );

最新更新