Hallo an alle!
Ich hab´ mal wieder ein Problem mit C...
Und zwar möchte ich gerne mein Proggie mit 2 Sprachen ausstatten. Das soll dann so ähnlich wie mit den po-Dateien funktionieren, leider weiss ich nicht wie und ob überhaupt sowas mit C funktioniert, ware ja toll.
Ich bin jedenfalls erstmal davon ausgegangen, das es nicht geht :-( und hab selber versucht, sowas in der Art zu realisieren. Bis jetzt bin ich soweit, das das Prog erstmal fragt, welche Sprache denn gewünscht ist. Ist das erledigt, wird´s in eine Datei geschrieben (options.txt). So, jetzt kommt das eigentliche Problem: In zwei Dateien (de.h(de.c), en.h(en.c)) stehen die Strings mit der Bezeichnung test_s. Nun beschwert der Compiler sich allerdingens das test_s zweimal definiert ist. Für mich eher unverständlich, denn immerhin soll ja, je nach Fall, nur eine Datei included werden.
Ich schreibe mal die main.c mit hier rein(... und hoffe nebenbei das das nicht nervt).
main.c:
#include <stdio.h> #include <stdlib.h> #include <string.h> #ifndef DATNAME #define DATNAME "options.txt" #endif
extern const char test_s[30]; /* Das ist der String */
void de(); void en(); void lesen();
void de(void) { printf("%s\n",test_s); }
void en(void) { printf("%s\n",test_s); }
void lesen(void) { char s[16]; FILE *fhd;
char s3[8]="lang=en"; char s4[8]="lang=de"; int a=0; fhd=fopen(DATNAME,"r"); fgets(s,8,fhd); do{ if(strstr(s,s3)){ printf("%s\n",s); a=1; break; } if(strstr(s,s4)){ printf("%s\n",s); a=2; break; } fgets(s,8,fhd); }while(!feof(fhd)); fclose(fhd); #if a==1 /* kann ich mit Hilfe des PP Variablen ordentlich auslesen? */ #include "en.h" en(); #endif
#if a==2 #include "de.h" de(); #endif
#if a==0 printf("Haha! Nix eingegeben...\n"); #endif }
void main(void) { FILE *fhd; char s[3]; char s2[6]="lang="; fhd=fopen(DATNAME,"w"); if(!fhd){ printf("Nix mit Datei!!\n"); }else{ printf("Deutsch (de)\nEnglish (en)\n"); printf("> "); scanf("%s",s); /* Für Ulf: %c funzt nicht. Ich kann nix eingeben, der macht einfach weiter */ } if(strcmp(s,"de")){ fputs(s2,fhd); fputs(s,fhd); fputs("\n",fhd); } if(strcmp(s,"en")){ fputs(s2,fhd); fputs(s,fhd); fputs("\n",fhd); }else{ printf("Please enter en or de!\n"); } fclose(fhd); lesen(); }
Meine Theorie: Den Präprozessor interessiert das garnicht, was im Programm abgeht. Der will einfach nur einbinden. Hmm, hab mal was ausprobiert.
main2.c
#include <stdio.h> #include <stdlib.h> void main (void) { int a=0; printf("Eingabe > "); #if a==1 printf(" Eingabe: 1\n"); #define _T 1 #endif #if a==2 printf(" Eingabe: 2\n"); #define _T 2 #endif printf("%i\n",_T); }
Genau! Es geht nicht richtig! Gebe ich 1 ein: kommt auch 1 wieder raus! Gebe ich aber nun 2 ein, was kommt dann unlogischerweise raus??? 1!
Was nun? Bin ich zu doof dafür? Ok das wars, könnt ihr mir bitte einen Tipp geben was ich da wieder falsch mache?
Bye und danke, Sebastian, der nun vor Frust Gothic angemacht hat...