[C] Probleme bei Char eingabe

Plasmaschlag

Grünschnabel
Hallo Leute,

Ich habe ein Problem mit meinen char's. Ich weiß nicht, wie ichs richtig beschreiben soll. Habe 2 char in meinem Programm und es geht um Dateipfade. Der 1. soll per Eingabe definiert werden (z.B. C:\users\jannik\desktop). Das funktioniet auch problemlos. Der 2. soll schon definiert sein als G:\Autorun\test. Bei der Ausgabe kommt dann aber anstatt:
--Dateipfad: G:\Autorun\test
--Eingabe : C:\users\jannik\desktop
Das raus:
--Dateipfad: G:\Autorun\testC:\users\jannik\desktop
--Eingabe : C:\users\jannik\desktop

C++:
#include <stdio.h>
#include <windows.h>

int main (void)
{
    char pfad[100];
    char adress[15];

    printf("Dateipfad eingeben: ");
    scanf("%[^\n]", &pfad);

    adress[0]='G';
    adress[1]=':';
    adress[2]='\\';
    adress[3]='A';
    adress[4]='u';
    adress[5]='t';
    adress[6]='o';
    adress[7]='r';
    adress[8]='u';
    adress[9]='n';
    adress[10]='\\';
    adress[11]='t';
    adress[12]='e';
    adress[13]='s';
    adress[14]='t';

    printf("\nDateipfad: %s\n", &adress);
    printf("Eingabe  : %s\n\n", &pfad);

    system("pause");

    return 0;
}

Ich hab recht lange herumprobiert, aber leider ist mein Wissen in C noch ziemlich begrenzt und es ist schon fast 1 Jahr seit meinen letzen Übungen.
Ich hoffe ihr könnt mir helfen

Gruß Plasmaschlag
 
Hallo,

das Problem ist, dass du beim Zuweisen des Pfades an adress das '\0' am Ende des Strings vergessen hast.
Mach es besser so:

C++:
char adress[] = "G:\\Autorun\\test";


Und lass das & bei der Ausgabe mit printf() und der Eingabe mit scanf() besser weg. Es funktioniert zwar, aber es ist eigentlich nicht richtig.


Lg
 
Hi

C++:
char pfad[100];
char adress[15];
muss sein
C++:
char pfad[100];
char address[16];
Du brauchst min. 16 für 15 Zeichen, weil da noch ein \0 als Endmarkierung rein muss.
(das ist übrigens auch das von dir erkannte Problem.
Du hast die End-0 nicht, deswegen wird nach dem letzten Buchstaaben einfach weiter ausgegeben)

Ersetze
C++:
scanf("%[^\n]", &pfad);
min. durch
C++:
fgets(pfad, 16, stdin);
,
C++:
printf("\nDateipfad: %s\n", &adress);
printf("Eingabe  : %s\n\n", &pfad);
durch
C++:
printf("\nDateipfad: %s\n", address);
printf("Eingabe  : %s\n\n", pfad);
,
C++:
system("pause");
durch zB.
C++:
getchar();
und vorallem
C++:
adress[0]='G';
adress[1]=':';
adress[2]='\\';
adress[3]='A';
adress[4]='u';
adress[5]='t';
adress[6]='o';
adress[7]='r';
adress[8]='u';
adress[9]='n';
adress[10]='\\';
adress[11]='t';
adress[12]='e';
adress[13]='s';
adress[14]='t';
durch
C++:
strcpy(address, "G:\\Autorun\\test");

...da ist viel Aufholbedarf :p
 
Danke für die schnellen Antworten
C++:
strcpy(address, "G:\\Autorun\\test");
hat mir ne menge Arbeit gespart. Ich hätte da jetzt bei nem langen Pfad 150 Zeilen hingeballert.
Das \0 hab ich völlig vergessen.

Ich hatte die Schulform gewechselt, weil mir außer Programmieren nichts da spaß gemacht hat und dann ist das irgendwann in vergessenheit geraten. Jetzt bin ich beim aufräumen meiner Festplatte wieder darauf gestoßen und will in der Freizeit wieder C üben. Also kann sein, dass ich euch mit meinen ,,Codes,, in nächster Zeit nochmal zum Weinen bringe :)

Und: Muhaha ich kann auch mal wen korrigieren:

Nicht:
C++:
fgets(pfad, 16, stdin);
Sondern:
C++:
fgets(pfad, 100, stdin);
 
Ich habe noch eine kurze Frage, hat auch etwas mit Char Eingabe zutun.
In dem Programm soll man 1, 2 oder i eingeben. Wenn man z.B. ,,8,, oder ,,zhztrer,, eingibt, kommt wie geplant eine Fehlermeldung und man kann seine Eingabe wiederhohlen. Wenn man aber 12 eingibt, nimmt er indem Fall die Eingabe als 1 und wenn man noch weiter Eingaben danach (egal ob char oder int) eingebaut hat kakt das Programm ab. Wie schaffe ich es, dass bei der Eingabe einer z.B. 12 oder 19 trotsdem die Meldung kommt?

C++:
#include <stdio.h>
#include <windows.h>

int main (void)
{
 int t=0;
 char language;

 do{
  printf("Select your language:                                            i = information\n\t\t\tEnglish = 1\n\t\t\tDeutsch = 2\n\t\t\t:");
  scanf(" %c", &language);

          if(language=='i'){;system("cls");
            printf("\n\tDownloadtime calculator \n\tVersion: 5.3\n\tDate   : 14.02.2013\n\n");
            continue;}

          if(language=='1'||language=='2'){
              t=1;
              system("cls");break;}

          if(t!=1){
              printf("\nSorry. Please try again. Press 1,2 or i.");
              Sleep( 3000 );
              while ( getchar() != '\n' );
              system("cls");continue;}

 }while(t!=1);

    if(language=='1')
        printf("\nEnglish\n");
    if(language=='2')
        printf("\nDeutsch\n");

  getchar();

return 0;
}

Da habe ich gestern Abend 3h mir die Zähne ausgebissen. Das währe auch dann erstmal meine letzte Frage
 
Du könntest es mit der Schleife mit der du den Puffer bei einer falschen Eingabe leerst versuchen.
Schreibe sie ins if, das ausgeführt wird, wenn der Benutzer etwas richtiges eingegeben hat. Wenn das getchar() in der Schleife noch etwas anderes als \n zurückgibt, dann hat der Benutzer noch etwas anderes eingegeben, es wäre also falsch.

Lg
 
Zurück