char / int system, C

Tags:    c int char pointer

Jeg har et problem med noget kode som jeg ikke kan få til at virke. Problemet består i noget jeg ikke helt kan forstå selv, men jeg ved da hvad jeg vil gøre, så det kan i da lige få med!

Hele koden:
Fold kodeboks ind/udC kode 


Jeg får et input som er int, antal sekunder. Dem sender jeg videre til funktionen convert_seconds. Den udregner så timer, minutter og sekunder. Det var fint nok. Så ville jeg have sådan at når et tal er under 10, så skal der skrives et 0 foran, f.eks. 9 -> 09, 5 -> 05.

Det sker i need_zeroes, men der går det galt, for den skal smide int'en ind i en char. Kan ikke finde ud af hvorfor den ikke gider :/






Indlæg senest redigeret d. 12.09.2011 15:46 af Bruger #10325
5 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Du gør det lidt svært for dig selv, for printf kan selv smide nuller ind:
Fold kodeboks ind/udC kode 


2-tallet betyder, at der skal bruges mindst to decimaler. Nullet betyder, at der skal fyldes op med foranstillede nuller.
Hvis tallet fylder to eller flere decimaler, så sættes der ikke nul foran.

Mht dette:
Fold kodeboks ind/udKode 

...så bruger du netop IKKE en pointer i første, men det gør du i anden. '*var' er en dereferering af en pointer og giver dig det, som pointeren peger på.



Indlæg senest redigeret d. 12.09.2011 21:06 af Bruger #2695
OK - vi er enige om at den virker fint når input er under 10, ikke? Men prøv at se hvad der sker i need_zeroes hvis input ikke er under 10? Så laver du bare et tomt char array temp og returnerer det. Og det er jo bare gris der ligger i det, for du har ikke gjort noget ved det endnu.



Nej nej, mit problem problem er skidtet slet ikke gider at sende noget tilbage. Det var derfor jeg hardcodede 5 ind som værdi.

Jeg har haft vekslende outputs i form af "gcd" og så en vekslende mængde ' (apostroffer).

Jeg smider lige nogen af de notices jeg har:

warning: Semantic Issue: Incompatible pointer types passing 'char (*)[128]' to parameter of type 'char *' - x3 (de er ved hver variable ved convert_seconds(seconds, &hours, &mins, &secs) - alle værdierne der ikke er inputs giver fejlen.

Så har jeg også:

warning: Semantic Issue: Incompatible pointer to integer conversion returning 'char [20]' from a function with result type 'char'

Jeg er sikker på det har noget med hvordan jeg smider int til en streng og tilbage, men er sku ikke sikker på hvad det er der gør det. En eventuelt nemmere måde at tilføje 0 foran en int er velkommen.


Edit: mht. når den ikke er under 10 er det jo bare [...]} else { temp = input; } return temp; }






Indlæg senest redigeret d. 12.09.2011 17:39 af Bruger #10325


Edit: mht. når den ikke er under 10 er det jo bare [...]} else { temp = input; } return temp; }




Helt klart, men det skulle jo lige huskes.
Ang. dine andre fejl, så lav lige nogle test cases hvis det er . Altså hvor du hardcoder nogle værdier ind og så kan jeg lige køre det og se hvor den opfører sig skidt.



Jeg har prøvet at smide det her ind i convert_seconds();

Fold kodeboks ind/udC kode 


altså istedet for at kalde funktionen need_zeros(), så bare skrive en if/else ind. Problemet ligger helt klart i at sprintf() ikke smider det rigtige i *secs.

Hvis jeg kører hele koden med det ovenstående, så bliver outputtet bare 00:00:00.


Edit: AHA! Jeg fandt ud af skidtet.

Jeg måtte åbenbart ikke bruge en pointer i sprintf(); hvorfor er jeg ikke klar over, men altså:

sprintf(*var, "%d", some_int); //Forket
sprintf(var, "%d", some_int); //Rigtigt



Indlæg senest redigeret d. 12.09.2011 20:09 af Bruger #10325
t