【发布时间】:2021-07-18 14:24:59
【问题描述】:
我正在做一个关于使用结构和指针来管理洗车中的一些东西的项目,我必须计算给定队列完成洗车所需的时间,可以这么说,其中“almindelig”(普通)和 luksus(豪华),每个时间分别为 10 和 20 分钟。这是我目前的程序,在我创建“计数”函数的地方,我得到的输出是一个未定义的整数。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
//Jeg laver to structs her, en for bil, der indeholder nummerplade, maerke og type af bil
struct bil
{
char *Nummerplade;
char *Maerke;
char *Type;
};
//Det andet er for koen, hvorved der bliver lavet et array med pointere *bi[100] hvorved dataen der bliver indtastet bliver opbevaret i
struct koe
{
struct bil *bi[100];
int antal;
};
//Her bruger jeg en funktion fra programmet Koe3.c fra forelæsning, som jeg har
// omskrevet således at det fungerer til mit program, hvor jeg bruger struct bil
void ind(struct koe *k,char *N,char *M, char *T)
{
int antalelementer=k->antal;
struct bil *b;
b=malloc(sizeof(struct bil));
b->Nummerplade=N;
b->Maerke=M;
b->Type=T;
k->bi[antalelementer]=b;
k->antal++;
}
//Her er det en simpel printf funktion, der tager udgangspunkt i struct bil b, hvorved der vil være data der er indlæst i
void udskrivpunkt(struct bil b)
{
printf("(%s, %s, %s)\n",b.Nummerplade,b.Maerke, b.Type);
}
//Jeg bruger en omskrevet version af Koe3.c fra forelæsning, hvor jeg har omskrevet den til at kunne bruge struct bil i stedet
void udskrivkoe(struct koe k)
{
int i;
for(i=0;i<k.antal;i++)
udskrivpunkt(*(k.bi[i]));
printf("\n");
}
//Jeg bruger en omskrevet version af koe3.c fra forelæsningen.
struct bil ud(struct koe *k)
{
k->antal--;
struct bil element=*(k->bi[0]);
int i;
free(k->bi[0]);
for (i=0;i<k->antal;i++)
k->bi[i]=k->bi[i+1];
return element;
}
//Her laver jeg et simpelt for loop, der bruger struct koe k til at gennemløbe arrayet, hvorved der er indlæst data om bilerne, og den returnerer k
//som er antallet af elementer i arrayet, jeg kan derfor kalde på den senere i programmet,
//for at finde ud af hvor mange elementer der er indlæst med struct koe k i arrayet.
int totalkoe(struct koe k)
{
int i;
for(i=0;i<k.antal;i++)
return(k.antal);
}
int totaltid(struct koe k)
{
struct bil b;
int i,counter1, counter2, sum;
for(i=0;i<k.antal;i++)
if(b.Type="Almindelig")
counter1++;
else
counter2++;
sum=10*counter1+20*counter2;
return(sum);
}
//I min main funktion kalder jeg blot på de funktioner og structs jeg har defineret tidligere i programmet
int main(void) {
int n, i;
struct bil b;
struct koe k;
k.antal=0;
//Jeg kalder på min ind funktion, hvorved jeg kan indlæse noget data jeg indtaster i programmet, og som der bliver gemt i arrayet bi[100]
printf("\nOpgave 1: Registrerer biler der ankommer i koeen\n\n");
printf("Alle biler i koeen:\n");
ind(&k,"AV96888","VW","Almindelig");
ind(&k,"KD65656","Audi", "Luksus");
ind(&k, "AX21878", "Ford", "Almindelig");
ind(&k, "CN32323", "VW", "Almindelig");
ind(&k, "NB21214", "Ford", "Luksus");
ind(&k, "UM21878", "Ford", "Almindelig");
ind(&k, "AV54361", "Tesla", "Almindelig");
udskrivkoe(k);
printf("\nOpgave 2: Udtage den første bil i koeen\n\n");
printf("Den foerste bil bliver nu vasket og fjernes fra koeen:\n");
b=ud(&k);
udskrivkoe(k);
printf("\nOpgave 3: Få information om hvor mange biler der er i koeen\n");
printf("\nDer er %d biler i koe\n\n",totalkoe(k));
printf("%d",totaltid(k));
return 0;
}
我很难排除故障的代码部分是这部分:
int totaltid(struct koe k)
{
struct bil b;
int i,counter1, counter2, sum;
for(i=0;i<k.antal;i++)
if(b.Type="Almindelig")
counter1++;
else
counter2++;
sum=10*counter1+20*counter2;
return(sum);
}
输出为未定义的整数。
很抱歉,很长一段文字,但我认为您需要整个程序才能更好地理解/帮助。任何意见表示赞赏。
【问题讨论】:
-
请忽略所有注释掉的东西,让我更好地记住每个函数的作用
-
if(b.Type="Almindelig")这是一个分配(一个=),并且总是会评估为一个真实的条件。始终在启用警告的情况下进行编译、阅读、尝试理解和修复这些警告。 -
请注意,
==也不是比较字符串的正确方法(strcmp是)。您是否考虑过对 C 进行更系统的介绍,例如reading a book? -
我知道我没有提到你得到随机数的真正原因,只是启用警告并让编译器告诉你(一些未初始化的东西)。
-
是的,我试过读一本书,我在介绍 c 编程 atm,因此为什么有些事情我不确定
标签: c string function pointers struct