Funktion schreiben und eine Float zahl verändern
-
Hallo zusammen,
vielleicht könnt ihr mir mal auf die Sprünge helfen, ich will eine Funktion schreiben die eine flat zahl mit nur einem Vorzeichen wieder gibt also entweder + oder minus.
Das zweite wäre eine Sicherung vor zu nehmen die dem Benutzer nicht erlaubt Buchstaben zu verwenden aber dafür die Fließkommazahl mit Punkt und Komma zu Trennung erlaubt.Es wäre super wenn ihr mir einen Hinweis geben könntet wie ich so ein Problem angehen muss, weil ich nie weiß wie ich mit so aufgaben anfangen muss.
vielen Dank schon mal
-
hallo,
t1981 schrieb:
ich will eine Funktion schreiben die eine flat zahl mit nur einem Vorzeichen wieder gibt also entweder + oder minus.
soll sich das der benutzer aussuchen oder wie?
t1981 schrieb:
Das zweite wäre eine Sicherung vor zu nehmen die dem Benutzer nicht erlaubt Buchstaben zu verwenden aber dafür die Fließkommazahl mit Punkt und Komma zu Trennung erlaubt.
den rückgabewert von scanf prüfen und checken ob noch buchstaben im puffer übrig sind.
-
t1981 schrieb:
ich will eine Funktion schreiben die eine flat zahl mit nur einem Vorzeichen wieder gibt also entweder + oder minus.
wenn die zahl negativ ist, macht printf automatisch das minuszeichen davor.
wenn du ein + vor einer positiven zahl willst musst du ne if-abfrage vor der ausgabe machen und dann ein pluszeichen ausgeben.
-
erst mal danke für die Antwort.
also ganz ehrlich ich verstehe auch nicht wo zu das gut sein soll
eine float zahl soll eingegeben werden und der Benutzer soll entscheiden ob + oder -.
und es dürfen keine Buchstaben sein nur zahlen aber es soll egal sein ob punkt oder Komma!?das einzige was ich bis jetzt habe ist:
float z;
printf("Zahl eingeben: \n");
scanf("%f",z);
fflush(stdin);und weiter komme ich nicht
-
wenn die zahl negativ ist, macht printf automatisch das minuszeichen davor.
wenn du ein + vor einer positiven zahl willst musst du ne if-abfrage vor der ausgabe machen und dann ein pluszeichen ausgeben.das er dort ne negative zahl macht weiß ich man kann ja auch ein + eingeben. aber er macht auch beides als '+-' und das soll auf gar keinen Fall sein.
mit if habe ich mir das auch gedacht aber ich kenne nur if Anweisungen die so ausehen
if(a<b)
usw.
wie soll das denn bei + und - sein das muss doch ein oder ( || ) dazwischen sein oder? aber mit welch Anweisung oder schleife kann man das denn machen?
-
So, oder so ähnlich, probier mal, ob es fehlerfrei läuft:
#include <stdlib.h> #include <stdio.h> #define MAX_STELLEN 10 int get_float(float *wert) { char c; int gueltig = 0; int pos = 0; int vorz_gueltig = 1; int komma_gueltig = 0; int komma_da = 0; char zahl[MAX_STELLEN + 1]; while(((c = getch()) != 13) && (pos < MAX_STELLEN - 1)) { if(c <= '9' && c >= '0') { printf("%c", c); zahl[pos++] = c; gueltig = 1; vorz_gueltig = 0; if(!komma_da) komma_gueltig = 1; continue; } if((c == '-' || c == '+') && vorz_gueltig) { printf("%c", c); zahl[pos++] = c; vorz_gueltig = 0; continue; } if((c == ',' || c == '.') && komma_gueltig) { printf("%c", ','); zahl[pos++] = '.'; komma_gueltig = 0; komma_da = 1; continue; } } if(gueltig) { zahl[pos] = 0; *wert = atof(zahl); printf("\n"); } return gueltig; } int main() { float zahl; printf("Zahl eingeben:\n"); if(get_float(&zahl)) printf("Eingabe war: %f\n", zahl); else printf("Eingabe war ungueltig\n"); }
-
ja das kommt dem ganzen schon nah, vielen vielen dank.
Aber der bricht Komplet ab wenn man einen Buchstaben eingibt das soll er nicht der soll dann sagen das das nicht geht und erneut um Eingabe bitten. und man kann nichts entfernen wenn man sich vertippt?!
und noch ne ganz große bitte kannst du mir das auch erklären so das ich das als blutige Anfänger verstehe?
ach da sind zwei warnungen?!
Warnung 1 warning C4013: 'getch' undefiniert; Annahme: extern mit Rückgabetyp int
Warnung 2 warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlustund tausend dank
-
t1981 schrieb:
aber er macht auch beides als '+-' und das soll auf gar keinen Fall sein.
wenn das so ist, lies die eingabe in einen string ein und gucke nach, was für zeichens drinne stehn!
-
und wie soll das gehen? es ist doch eine zahl!
-
t1981 schrieb:
und wie soll das gehen? es ist doch eine zahl!
This is C, es geht so ziemlich alles, wenn auch mit gewissem Aufwand.
Ungefähr so:int is_sign (char c) { return c == '-' || c == '+'; } int main() { char buf [32] = {0}; double number = 0.0; char* p=NULL; printf( "Please enter a number: " ); if ( NULL == fgets(buf, sizeof(buf), stdin)) return 1; if (p = strchr(buf,'\n')) // Zeilenumbruch entfernen. *p = 0; p = buf; while (*p == ' ') // Eventuelle Leerzeichen skippen. p++; if(!strlen(p)) return 1; // Nix eingegeben. if (is_sign(*p) && is_sign(*(p+1))) { puts("Too much Vorzeichens!"); return 1; } number = strtod(buf,&p); // simsalabim, konversion eines strings nach double :) if (*p) printf("Illegal char(s) in string: %s\n", p); printf("Converted string to double: %f\n", number ); return 1001; }
-
ja aber da fehlen ersten die Bibliotheken und es ist keine Funktion sonder nur in mail
-
also die Bibliotheken habe ich jetzt aber das prog macht keine nach Kommazahlen und das soll ja drin sein also nicht illegal sein
-
t1981 schrieb:
ja aber da fehlen ersten die Bibliotheken und es ist keine Funktion sonder nur in mail
musste in eine separate funktion auslagern dann isses nicht in main.
t1981 schrieb:
also die Bibliotheken habe ich jetzt aber das prog macht keine nach Kommazahlen und das soll ja drin sein also nicht illegal sein
das konvertiert nach double, double kann auch nachkommazahlen. in c werden kommazahlen mit dem dezimalpunkt eingegeben. wenn du auch das komma eingeben willst, musst du aus dem komma nen punkt machen.