PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Newbie



Tastengott
09-07-2001, 20:01
Hallo!

Ich bin noch ein völliger Newbie im Umgang mit C.
Aber ich möchte es lernen.
Hab jetzt folgendes Problem.

----snipp----

#include <stdio.h>
int main()
{
char a,b,c;
int i=1;

printf("%d. Buchstabe : ",i++);
scanf("%c",&a);
fflush(stdin);
printf("%d. Buchstabe : ",i++);
scanf("%c",&b);
fflush(stdin);
printf("%d. Buchstabe : ",i);
scanf("%c",&c);
fflush(stdin);
printf("Ich sortiere.....\n\n");

printf("%c %c %c\n",a,b,c);
return 0;
}

----snapp----

Wenn ich das kompiliere und ausführe, bekomme ich immer nur zwei Werte zurück.
Woran liegt das?
Kann mir jemand helfen?
:confused:

jgbauman
10-07-2001, 00:55
So geht's (wenn auch mehr schlecht als recht)

#include &lt;stdio.h&gt;
int main() {
char a,b,c,nl;
int i=1;

printf("%d. Buchstabe : ",i++);
scanf("%c%c",&a,&nl);
fflush(stdin);
printf("%d. Buchstabe : ",i++);
scanf("%c%c",&b,&nl);
fflush(stdin);
printf("%d. Buchstabe : ",i);
scanf("%c%c",&c,&nl);
fflush(stdin);
printf("Ich sortiere.....\n\n");

printf("%c %c %c\n",a,b,c);
return 0;
}
Das Return (newline = '\n') mit dem Du deine Eingaben abschliessen must damit das Programm sie bekommt, wenn das Terminal im kanonischen Modus laueft ist auch ein Zeichen was beachtet werden will.

Merke fuer die Zukunft: scanf() und alle seine Varianten sinds pfui. Am besten nicht benutzen.

Besser mit fgets einen ganzen Zeile lesen (aber bitte keinen Bufferoverflow produzieren) und deren Inhalt dann selber analysieren (z.B. Leerzeichen am Anfang und Ende abschneiden, etc...)

Oder gleichen gegen libreadline linken ;-)

buchi
11-07-2001, 01:17
Aehmmmm, das letzte bitte nochmal, das versteh ich jetzt nicht ganz :confused:


Buchi

iGEL
15-07-2001, 11:54
Moin!

> Ich bin noch ein völliger Newbie im Umgang mit C.
> Aber ich möchte es lernen.
> Hab jetzt folgendes Problem.
> [...]
> Wenn ich das kompiliere und ausführe,
> bekomme ich immer nur zwei Werte zurück.
>
> Woran liegt das?
> Kann mir jemand helfen?
> :confused:

Ich kenne fflush nicht, und es scheint auch nicht so zu arbeiten, wie du dir das vorstellst :) Ersetze es durch while (getchar() != '\n');, und es geht!



#include <stdio.h>

int main()
{
char a,b,c;
int i=1;

printf("%d. Buchstabe : ",i++);
scanf("%c",&a);
while (getchar() != '\n');
printf("%d. Buchstabe : ",i++);
scanf("%c",&b);
while (getchar() != '\n');
printf("%d. Buchstabe : ",i);
scanf("%c",&c);
while (getchar() != '\n');
printf("Ich sortiere.....\n\n");

printf("%c %c %c\n",a,b,c);
return 0;
}


Und ich würde mir _unbedingt_ angewöhnen, Schleifen, Bedingungen und andere Blöcke immer einzurücken. Es dient der Übersicht!

cu Johannes