vind mijn fout niet :s

Status
Niet open voor verdere reacties.

el_froggy

Gebruiker
Lid geworden
21 jun 2005
Berichten
114
Hey, ik ben bezig een cursus C te volgen voor beginners.
nu was ik bezig mijn opdrachten te oefenen
en de volgende oefening, graakt zonder fout door mijn compiling, maar hij geeft het karakter niet weer.. :s
1.2 Schrijf een programma dat een integer, een karakter en een float vraagt en deze dan in één string op het scherm toont

PHP:
/*opdracht 2 van hoofdstuk 1*/
#include<stdio.h>
int main(void)
{
int integer;
float fluitje;
int karakter;

printf("geef de integer: ");
scanf("%d",&integer);
printf("geef de float: ");
scanf("%f",&fluitje);
printf("geef een karakter in aub -> ");
karakter = getchar();
printf("je hebt een integer: %d , een float: %f en een karakter: %c ingevoerd. proficiat\a",integer,fluitje,karakter);

return 0;
}
 
Ik heb geen programeer ervaring met C++, maar een paar dingen vallen me op.

Karakter lijkt met geen Int(eger), maar een String, en de variabele %c wordt nergens gevuld is dus leeg ("") en wordt dus als leeg ("") afgedrukt.
 
#include <stdio.h>

int main( void ) {
int integer;
float fluitje;
char karakter;
printf( "Geef een integer: ");
scanf( "%d",&integer );
printf( "Geef een float: ");
scanf( "%f",&fluitje );
printf( "Geef een karakter: " );
// als string inlezen vanwege null-terminated string \0
scanf( "%s",&karakter );
// float afronden op 2 decimalen
printf("\n- Integer:\t%i\n- Float:\t%.2f\n- Karakter:\t%c\n", integer, fluitje, karakter );
return 0;
}
 
scanf("%s", &karakter);

Moet je voor de gein eens meer dan 1 karakter invoeren, beetje veel graag. Meer dan 13 bij mijn compilatie.

Beetje oppassen voor een buffer overflow! LOL
 
Hoi

Verander bij het inlezen van je float je scanf een in dit: scanf("%f%*c",&fluitje);
Nadat je een float hebt ingegeven drukt je op enter en dit is het karakter dat in je keyboardbuffer blijft zitten... Hij ziet dus je enter als karakter... Doordat je de %*c erachter zet, zeg je eigenlijk van een karakter in te lezen %c, en de * ertussen wil zeggen: lees het in maar de er niks mee...

Je kan het ook anders doen:
- scanf("%f", &fluitje);
fflush(stdin);
==> zo wis je je buffer typ maar een en druk f1

- scanf("%[^\n]", &fluitje); zo zet je en filter voor het inlezen die geen enter aanvaard maar wel spaties, dit kan handig zijn als je een volledige zin moet inlezen, voor gewoon een karakter is dit wat oerbodig.

Neem dus best het eerste dat helemaal bovenaan staat... Khoop dat ik je wat geholpen heb... bonne chance en remeber veel oefenen in c is de boodschap :thumb:

Grtz
 
mooncrawler zei:
// als string inlezen vanwege null-terminated string \0
scanf( "%s",&karakter );

Ik denk niet dat dat een goed plan is om het zo op te lossen, hij heeft immers de mogelijkheid een string in te lezen, waar hij maar één enkel karakter mag inlezen... Dit kan in andere progs problemen geven...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan