Zeichenkette, Komma durch Punkt ersetzen!
-
Hi, muss ein Programm schreiben, dass eine Zeichenkette einliest und alle Kommas durch Punkte ersetzt. Anschließend soll das Programm die Zeichenkette einlesen und nur einen Zeiger auf den ersten Wert übergeben ( was auch immer dieser Satz heißen mag, verstehe ich nicht). In einer weiteren Funktion soll die Länge der Zeichenkette bestimmt werden.
Soweit hab ich das Programm, doch es öffnet sich nicht und ich finde die Fehler nicht, kann mir hier bitte jemand helfen?
#include <stdio.h>
void ausgetauscht (char *stringzeiger) {
while (*stringzeiger) {
if (*stringzeiger ==0x2C)
*stringzeiger ==0x2E;
}
}int laenge (char *stringzeiger) {
int i=0;
while (*stringzeiger) {
i++;
return i;
}
}int main()
{char Zeichenkette [10];
printf ("Bitte geben sie eine Zeichenkette mit max 10 Stellen ein \n");
gets (Zeichenkette);
augetauscht (&Zeichenkette [0], i++);printf ("Die Laenge der Zeichenkette ist %d \n", laenge);
printf ("Die neue Zeichenkette ist %s \n", ausgetauscht);
system("PAUSE");
return 0;
}Danke schon mal!
Gruß
-
In
ausgetauscht
wird in der Schleife nichts verändert, was Auswirkung auf die Schleifenbedingung hat. (Da ist nichts mit ++ oder dgl.)Wenn du einen '.' haben willst, dann schreib auch '.' und nicht so was kryptisches wie 0x2E.
Dann nutze bitte die Code-Tags: Code markieren und den C-Button unter dem
anklicken.
Statt
gets
nimmfgets
mitstdin
als Stream.Warum rufst du
ausgetauscht
mit 2 Paramtern auf. Du hast sie mit nur einem definiert.Öffnet sich nicht, hört sich danach an, dass da Programm nicht startet, weil es Fehler beim compilieren gibt.
Die solltest du dir mal durchlesen. Auch die Warnungen sind wichtig.
Und beim nächsten mal auch hier mit angeben.
-
Okay, danke schon mal, also das mit dem Punkt und Komma hatte ich anfangs so, hatte aber nicht funktioniert und ich bekam eine Fehlermeldung, mit dem Hex-Code nicht mehr! Mit fgets bekomme ich nur noch eine zusätzliche Fehlermeldung : 27 C:\...main.c too few arguments to function `fgets'
Verstehe nicht ganz was du mit 2 Parametern meinst in augetauscht, hab doch nur einen oder?
Also hab jetzt nochmal bisschen umher getan, nun sieht es so aus:
#include <stdio.h>
void ausgetauscht (char *stringzeiger) {
while (*stringzeiger) {
if (*stringzeiger ==0x2D)
*stringzeiger ==0x2E;
}
}int laenge (char *stringzeiger) {
int i=0;
while (*stringzeiger) {
i++;
return i;
}
}int main()
{char Zeichenkette [10];
printf ("Bitte geben sie eine Zeichenkette mit max 10 Stellen ein \n");
gets (Zeichenkette);
augetauscht (&Zeichenkette [0]);printf ("Die Laenge der Zeichenkette ist %d \n", laenge);
printf ("Die neue Zeichenkette ist %s \n", ausgetauscht);
system("PAUSE");
return 0;
}Das Programm öffnet sich nicht und ich bekomme nur noch diese Fehlermeldung:
[Linker error] undefined reference to `augetauscht'
ld returned 1 exit status
C:\Users\Programmierung\Makefile.win [Build Error] ["Punkt,] Error 1Hab keine Ahnung was ich jetzt noch machen soll!
-
augetauscht
Guck doch noch mal genau hin.
-
FranzM schrieb:
Also hab jetzt nochmal bisschen umher getan, nun sieht es so aus:
Wo hast du denn da etwas geändert? Das ist doch das gleiche in grün wie vorher.
[Linker error] undefined reference to `augetauscht'
Damit möchte dir dein Compiler mitteilen, dass es keine Funktion mit dem Namen augetauscht gibt.
-
Und da es die Funktion nicht gibt, kann er kein ausführbares Programm erstellen.
Dann ist auch klar warum "sich da nichts öffnet".Der Compiler gibt auch noch eine Menge mehr Meldungen von sich.
Auch die Warnungen musst du beachten, denn sie geben wertvolle Hinweise was noch falsch sein kann.Denn die nächste Frage kommt bestimmt. "Warum werden die kommas nicht ersetzt?"
Und zu der Meldung mit fgets. Dann schau dir mal an wie man fgets benutzt.
Du hast da zu wenig Paramter angegeben.
-
Ahja, habe es jetzt nach 30 min herausgefunden, dass ein "s" fehlt. Danke für den indirekten Hinweis!
Das Programm funzt fast..:
#include <stdio.h>
void ausgetauscht (char *stringzeiger) {
while (*stringzeiger) {
if (*stringzeiger ==0x2C)
*stringzeiger ==0x2E;
stringzeiger++;
}
}int laenge (char *stringzeiger) {
int i=0;
while (*stringzeiger) {
i++;
stringzeiger++;
}
return i;
}int main()
{char Zeichenkette [10];
printf ("Bitte geben sie eine Zeichenkette mit max 10 Stellen ein \n");
gets (Zeichenkette);
ausgetauscht (&Zeichenkette [0]);printf ("Die Laenge der Zeichenkette ist %d \n", laenge (&Zeichenkette[0]));
printf ("Die neue Zeichenkette ist %s \n", Zeichenkette);
system("PAUSE");
return 0;
}Mein Kollege hat dieses Programm geschrieben und es funzt:
#include <stdio.h>
void austausch(char *stringzeiger){
while(*stringzeiger){/* solange das ende des strings nicht erreicht ist */
if(*stringzeiger==0x2C) /* wenn ein Komma gefunden */
*stringzeiger=0x2E; /*ersetze durch Punkt */stringzeiger++; /* Zeiger soll auf die nächste Zelle Zeigen */
}
}int laenge (char *stringzeiger){
int i=0;
while(*stringzeiger){/* solange das ende des strings nicht erreicht ist */
i++; stringzeiger++;}
return i;
}int main()
{char string[37];
printf("Bitte geben Sie eine Zeichenkette zum Austausch von Komma zu Punkt ein \n \n");
gets(string);
austausch(&string[0]);
printf(" Die Länge ist %d \n",laenge(&string[0]));
printf(" Die neue Zeichenkette lautet; \n %s \n",string);system("PAUSE");
return 0;
}Aber das Komma wird nicht durch einen Punkt ersetzt, auch wenn ich das 0x2E mit "." ersetze funktioniert es nicht, da dann 8 C:\Users\.. Programmierung\Projekt1.c syntax error before ',' token kommt!
Ja stimmt das ist meine nächste Frage, ich habe keine Fehlermeldungen oder Warnungen mehr, daher weiß ich wirklich nicht was jetzt wieder los ist. Denn ich finde das Programm ist fast identisch wie das von meinem kollegen, blos bei ihm gehts und bei mir nicht! Hängt das jetzt mit den Parametern zusammen? Was meinst du genau mit Parametern?
Würde mich über eine direkte Lösung freuen! Danke
-
Jetzt hast du schon zum dritten mal auf die Code-Tags verzichtet.
#include <stdio.h> void ausgetauscht (char *stringzeiger) { while (*stringzeiger) { if (*stringzeiger ==0x2C) *stringzeiger ==0x2E; stringzeiger++; } } ....
Das sieht doch so viel hübscher und übersichtlicher aus.
Und was mein Compiler dazu sagt: C:\Users\DirkB\Entwicklung\Test\main.c| |In function 'ausgetauscht':| C:\Users\DirkB\Entwicklung\Test\main.c| 9|warning: statement with no effect| C:\Users\DirkB\Entwicklung\Test\main.c| |In function 'main':| C:\Users\DirkB\Entwicklung\Test\main.c|39|warning: implicit declaration of function 'system'| ||=== Build finished: 0 errors, 2 warnings ===|
Gerade die Warnung in Zeile 9 "statement with no effect" sollte dir zu denken geben.
Und vergleiche mal die Zeile von dir und deinem Kollegen.
Und ein "." ist etwas anderes als ein '.'.
-
Hey super, danke an alle!
Aber warum schreibe ich dort nur ein =?
Ich weiß das ist jetzt wahrscheinlich eine blöde Frage aber wenn ich links unten auf kompiler drücke, zeigt er mir nichts an von den codes! Wie oder wo kann ich diese sehen! Und danke noch mal für den " ' Hinweis
Gruß
-
Das == ist der Vergleich auf Gleichheit.
Das = ist die Zuweisung.Du musst die Compilerwarnungen in den Projekteigenschaften einschalten.
Und
Zeichenkette
und&Zeichenkette[0]
ergibt die gleiche Adresse.