2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
307
307
EMPFEHLEN
-
16.07.11 20:36 #1
- Registriert seit
- Jul 2011
- Beiträge
- 5
Guten Abend,
ich bin ganz neu mit der C Sprache und versuche grade eine Aufgabe mit string zu lösen aber ich komme nicht klar.
hier ist die aufgabestellung:
es soll eine Funktion entwickelt werden, die einen String untersucht, ob dieser eine korrekte negative Integer-Zahl darstellt oder nicht .( keine Exponentialeingabe)
Im String sind keine Leerzeichen.
Der String ist beliebiger lang
und return 0; --> String stellt eine negative Zahl dar.
return 1; --> string stellt keine negative zahl dar.
ich weiss, dass es im Programm überprüft werden sollte, dass im String immer ein in der ersten Stelle ein minus (-) zeichen drin ist, dann ob eine zahl immer im String enthalten ist.
und es sollte keine leerzeichen im String drin stehen.
Aber ich weiss nicht wie ich das ganze auf der Reihe jetzt kriege und brauche eure Hilfe.
Danke.
-
16.07.11 22:10 #2
- Registriert seit
- Jul 2011
- Beiträge
- 5
Also ich habe mir was überlegt und bin auf diese Lösung gekommen..
#include <stdio.h>
#include <cctype.h>
void main ()
{
int check_input(char *s)
/* Funktion prüft, ob eingegebener String ngative Zahl ist */
{
unsigned i;
if (s[0] != '-') /* Minus-Zeichen (-) überprüfen */
{
return 1;
}
for(i=1; i<strlen(s); i++) /* Überprüfe Ziffern bzw Zahl */
{
if(s[i] > '0' || s[i] < '9')
return 1;
}
return 0;
}
}
ich werde's noch testen, ob alles stimmt. Aber könntet ihr gerne andere Lösungen vorschlagen.
Danke
-
Hi und nachträglich Willkommen bei tutorials.de

Ein Tipp zu den Forumsfunktionen:
Schreib C/C++-Code das nächste Mal biite zwischen
[cpp]...[/cpp].
Machts um einiges besser lesbarer.
Zu der Funktion:
Prinzipiell ganz in Ordnung, aber ein Denkfehler (oder nur Tippfehler?):
Beim if mit der '0' und '9' gehören < und > vertauscht
Es ist dann keine Ziffer,wenn es kleiner als 0 oder größer als 9 ist (mit den ASCII-Werten betrachtet).
Noch zwei Punkte:
Warum steht check_input im main? Das sollte da raus.
Und die includes stdio und cctype brauchst du für diesen Code beide nicht. Verlangsamt nur das Kompilieren.
Gruß
-
16.07.11 23:03 #4
- Registriert seit
- Jul 2011
- Beiträge
- 5
hallo und danke für deinen Vorschlag.
ich habe den Tippfehler beim if schleife bemerkt, nachdem ich gepostet habe.
Allerding ich teste grade aber bekomme immer einen Fehler, dass die Variable s ein nicht deklarierter Bezeichner ist.
und für den letzten punkt haste Recht, braucht man keine stdio.h und cctype.h sondern string.h
kannst du mir helfen, den Fehler zu beheben?
Danke.
Gruß
-
In welcher Zeile wird der Fehler angezeigt?
Hast du die Funktion auch aus dem main rausgenommen?
if ist übrigens keine Schleife. Schleifen wiederholen sich (while, for, do-while).
-
16.07.11 23:22 #6
- Registriert seit
- Jul 2011
- Beiträge
- 5
ja hab die Funktion aus dem main rausgenommen und der Fehler beginnt nach der if Anweisung (s[0] ...
-
Also, wenn du das gemacht hast, sollte es eigentlich keine Probleme geben.
Kannst du nocheinmal den Code zeigen, wie er jetzt aussieht?
-
16.07.11 23:30 #8
- Registriert seit
- Jul 2011
- Beiträge
- 5
Ok.
So sieht der Code:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include <string.h> int check_zahl(char* s); void main() /* Funktion prüft, ob eingegebener String ngative Zahl ist */ { unsigned i; if (s[0] != '-') /* Minus-Zeichen (-) überprüfen */ { return 1; } for(i=1; i<strlen(s); i++) /* Überprüfe Ziffern bzw Zahl */ { if(s[i] > '0' || s[i] < '9') return 1; } return 0; }
-
Scheinbar hast du das Prinzip von Funktionen nicht ganz verstanden.
Die gibts, um Codeteile aus dem main auszulagern, und dann aus dem main
nur über den Funktionsnamen den ganzen Code auszuführen.
Macht bei sinnvoller Verwendung
1) alles übersichtlicher,
2) spart einem das Immer-wieder-neuschreiben bei mehrmaliger Verwendung
usw...
Hier was zum Lesen:
http://openbook.galileocomputing.de/c_von_a_bis_z/
Zum Code:
So funktionerts:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#include <string.h> int check_zahl(char* s) { unsigned i; if (s[0] != '-') return 1; for(i=1; i<strlen(s); i++) { if(s[i] > '0' || s[i] < '9') return 1; } } int main() { return 0; }
Wenn "in" einem if nur eine einzige Anweisung steht, kann man die {} auch weglassen.
Siehst du bei der Minus-Überprüfung.
Und main muss laut Standard int als Returntyp haben. Nicht void.
Vor allem, wenn man beim return Zahlen zurückgibt (int).
void würde für "nichts" stehen.
Gruß
-
17.07.11 09:54 #10
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.516
Ich hätte atoi() verwendet
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
19.07.11 23:06 #11
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
String auf Zahlen überprüfen. Wie geht das?
Von Davicito im Forum C/C++Antworten: 57Letzter Beitrag: 11.06.11, 06:23 -
String auf Zahlen Überprüfen
Von Happymaker im Forum JavaAntworten: 12Letzter Beitrag: 27.02.09, 18:49 -
String auf Zahlen überprüfen
Von Germu im Forum JavaAntworten: 5Letzter Beitrag: 10.09.08, 08:47 -
String auf zahlen überprüfen und auslesen - Regex oder was anderes?
Von zoidberger im Forum C/C++Antworten: 0Letzter Beitrag: 10.04.08, 14:08 -
String auf Zahlen überprüfen
Von Folcan im Forum C/C++Antworten: 8Letzter Beitrag: 12.09.07, 23:45





Zitieren


Login






