Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
IoResult ?

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Felix Gertz
Gast





BeitragVerfasst am: 04. Jul 2000 23:41   Titel: IoResult ?

Wie kann ich unter C eine IOResult Abfrage machen?

int a;
a=getchar();

Wenn ich hier z.B. k eingebe, also keine Ziffer, dann flippt er aus!

Unter Pascal könnte man das so unterbinden:
var a:integer;
{I+}a:=readkey;{I-}
If IoResult <> 0 then fehler;
 

andib



Anmeldungsdatum: 20.06.2000
Beiträge: 277
Wohnort: Dortmund

BeitragVerfasst am: 05. Jul 2000 1:07   Titel: Re: IoResult ?

Hast du mal ne ASCII Tabelle parat?

Probier mal
printf("%d", a);
und vergleiche!

Ergebnis: bei Eingabe von '2' bekommst du 50 - siehe ASCII.

Pascal kann ich leider nicht und weiss daher nicht was dieses IOResult sein soll, aber ich nehme mal an du willst prüfen, ob da eine Zahl eingegeben wurde. Zahlen liegen in der ASCII Tabelle bei 48 - 57, also sollte ein

a -= 48;
if (a >= 10)
printf("error - keine Zahl");

reichen.

CU
Andi
 
Benutzer-Profile anzeigen Private Nachricht senden

Felix Gertz
Gast





BeitragVerfasst am: 05. Jul 2000 2:43   Titel: Re: IoResult ?

Das Problem ist ja das er dabei komplett abdreht...
Ich kann also garnix mehr prüfen.

Hier, probiere selber:

int mitspieler;
do
{
printf("Wie viele Mitspieler (2-10) ? ");
scanf("%d",&mitspieler);
} while((mitspieler<2) || (mitspieler>10));

Solange ich nur Zahlen eingebe ist alles palletti.

Unter Pascal kann man einer Integer Variable keinen Char/String zuweisen.
Das Programm würde abstürtzen.
Dies kann man verhindern indem man eine IOResult Abfrage macht.

Grüsse

Flix
 

andib



Anmeldungsdatum: 20.06.2000
Beiträge: 277
Wohnort: Dortmund

BeitragVerfasst am: 05. Jul 2000 3:18   Titel: Re: IoResult ?

scanf? Ich denke es geht um getchar?
Na ja, egal.
Mit scanf hab ich nur wenig Erfahrung. Als die Probleme anfingen bin ich mit Vollgas auf C++ umgestiegen und hab mich lieber mit cin rumgeärgert Wink
Du könntest mal versuchen:

do {
printf("Wie viele Mitspieler (2-10) ? ");
char s[ 2 ];
scanf("%s", s);
if (s[ 0 ] == 49 && s[ 1 ] == 4Cool
mitspieler = 10; // 1. Zeichen == 1; 2. Zeichen == 0
else if (s[ 0 ] - 48 <= 9 && s[ 1 ] == '\0')
mitspieler = s[ 0 ] - 48;
} while(mitspieler < 2 || mitspieler > 10);

Du prüfst also zuerst, ob in dem string (= char array) mehr 2 Zeichen eingegeben wurde (s[ 1 ] != '\0') und verlangst dann, dass das eine 10 ist. ansonsten prüfst du, ob eine Zahl eingegeben wurde. Bei mir läuft das.
Aber scanf kann ich sowieso nicht leiden ;)

BTW: weiss jemand wie man beim Ultraboard eckige Klammern schreibt, ohne dass die Nachricht total verhunzt wird??

CU
Andi
 
Benutzer-Profile anzeigen Private Nachricht senden

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 05. Jul 2000 9:57   Titel: Re: IoResult ?

Hi,

oje, Pascal...

in C liefern die meisten Funktionen (jedenfalls die der C-Library) ein Resultat zurück. Im Fehlerfall ist das meist -1 (NULL bei Funktionen, die Pointer liefern). Die Variable errno enthält dann einen genauen Fehlercode, was in etwa dem IOResult entspricht. errno darf aber nur im Fehlerfall abgefragt werden. Wenn die Funktion erfolgreich war, muß man davon ausgehen, daß in errno etwas undefiniertes steht.

Gruß,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

Felix Gertz
Gast





BeitragVerfasst am: 05. Jul 2000 13:02   Titel: Re: IoResult ?

Es ist völlig egal ob ich getchar oder scanf.
Deine Methode funktioniert leider auch nicht.

Das Problem ist, er landet meistens in einer Endlosschleife..
Wie viele Mitspieler (2-10) ?
Wie viele Mitspieler (2-10) ?
Wie viele Mitspieler (2-10) ?
Wie viele Mitspieler (2-10) ?
Wie viele Mitspieler (2-10) ?

Aber mir ist was aufgefallen...

Wenn ich die Schleife entfehrne, dann wird die nächste Eingabe übersprungen.

Es sieht ganz so aus als würde der Buffer nicht gelert werden, oder?

Unter C++ würde ja wahrscheinlich cout.flush(); helfen.
Nur leider Programmiere ich nicht unter C++.

Felix
 

andib



Anmeldungsdatum: 20.06.2000
Beiträge: 277
Wohnort: Dortmund

BeitragVerfasst am: 05. Jul 2000 17:11   Titel: Re: IoResult ?

Bei mir funtioniert das. Allerdings sieht das dann so aus:

Wie viele Mitspieler (2-10) ? l
Wie viele Mitspieler (2-10) ? ddd
Wie viele Mitspieler (2-10) ? 8568
Wie viele Mitspieler (2-10) ? foo
Wie viele Mitspieler (2-10) ? 3

-> Die Schleife wird solange wiederholt, bis eine gültige Zahl eingegeben wurde.


> Es sieht ganz so aus als würde der Buffer nicht gelert werden, oder?

Meinst du die Input Variable? Die wird jedesmal überschrieben. Bei scanf("%s", xyz); wird außerdem am Ende als letztes Zeichen ein '\0' angefügt, soweit Platz ist.

Könnte es evtl. am Compiler liegen? Welchen benutzt du? Ich benutze hier den g++. Am Anfang habe ich ausserdem ein #include <stdio.h>.

CU
Andi
 
Benutzer-Profile anzeigen Private Nachricht senden

Felix Gertz
Gast





BeitragVerfasst am: 05. Jul 2000 19:44   Titel: Re: IoResult ?

Ich meine natürlich die Input Variable.

Ich benutze gcc -Wall (Er sagt nix besonderes).
Ausserdem binde ich ein
<stdio.h> <stdlib.h>

Aber sowas passiert bei mir:

scanf("%d",&a);
scanf("%d",&b);

Wenn ich nun keine Zahl eingebe, dann wird einfach das 2. Scanf übersprungen.
Woran kann sowas liegen?

Danke

Felix
 

andib



Anmeldungsdatum: 20.06.2000
Beiträge: 277
Wohnort: Dortmund

BeitragVerfasst am: 05. Jul 2000 21:19   Titel: Re: IoResult ?

Hmmm bei mir auch (aber die Schleife funktioniert hier trotzdem)

Was du machen könntest:

char a, b;
scanf("%c", &a);
scanf("%c", &b);
int a2, b2;
a2 = a - 48;
b2 = b - 48;

Nicht schön, aber ich weiss nix besseres. Aber bedenke, dass du nur mit einzelnen Zeichen arbeitest - für 2 Stellige Zahlen brauchst du wieder obigen Array.

CU
Andi
 
Benutzer-Profile anzeigen Private Nachricht senden

Felix Gertz
Gast





BeitragVerfasst am: 05. Jul 2000 22:23   Titel: Re: IoResult ?

Hmm schade..

Das wäre jetzt natürlich arg umständlich.
Ich habe auch noch Eingaben mit 5 stelligen und mehr Zahlen.

Ich habe das Gefühl andere haben nie solche Probleme, warum? ;)

Kann doch nicht sein, daß man das wirklich so ,wie Du vorschlägst, machen muss.

Na ja
Grüsse

Felix
 

andib



Anmeldungsdatum: 20.06.2000
Beiträge: 277
Wohnort: Dortmund

BeitragVerfasst am: 05. Jul 2000 22:58   Titel: Re: IoResult ?

Kann ich mir auch nicht vorstellen (wie gesagt ich bin früh auf C++ umgestiegen, das war nur das einzige was mir einfiel)

Mein schlaues Buch sagt hier folgendes:
code:

char zeile[20]; // oder wie lang auch immer Wink
int a = 0, b = 0;
fgets(zeile, sizeof(zeile), stdin);
sscanf("%d\n", &a);
fgets(zeile, sizeof(zeile), stdin);
sscanf("%d\n", &b);



-> scheint zu funktionieren (und ist auch schöner Wink)

CU
Andi
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy