001
04.01.2014, 19:55 Uhr
Hans
Library Walker (Operator)
|
Hi,
also wenn Du ein kompletter C-Anfänger bist, Dir also die Codezeilen für das Sensorprogramm beispielsweise nur wenig mehr als nichts sagen, dann solltest Du erst mal programmieren lernen, und Dich schrittweise an die Lösung heran arbeiten. Sonst hast Du einen Fall, wo alles funktioniert, aber nicht weisst warum. Oder nimm mal das Progamm unten, das aus einem Lehrbuch (Isernhagen, siehe hier, 3. Beitrag) stammt: Da ist ein logischer Fehler drin, der das Programm unter bestimmten Umständen abstürzen lässt, bzw. das Betriebssystem veranlasst, die ausführung abzubrechen. Wenn Du den nicht findest, solltest Du das (oder ein ähnliches) Buch erst mal durcharbeiten. Der Fehler hat nämlich was mit der Parameterübergabe an ein Programm zu tun.
Hans
C++: |
#include <stdio.h> #include <ctype.h> #include <string.h> #include <assert.h>
/*----------------Globale Typdefinitionen-----------------*/ #define ListLen 1000 #define WordLen 15
typedef char Word[WordLen+1];
typedef Word WordList[ListLen]; /* Gleichbedeutend mit typedef char Wordlist[ListLen][WordLen+1] */
/*----------------Globale Variable------------------------*/ int count, len;
/*----------------Prototypen------------------------------*/ void GetWord(FILE *ein, Word wo, int *length); /* Das naechste Wort aus der Datei ein holen, es ist length Zeichen lang */
void Include(Word wo, WordList list); /* Das Wort wo in die Wortliste list eintragen, wenn es nicht schon vorhanden ist */
void Sort(WordList list); /* Die Wortliste list alphabetisch - entsprechend dem ASCII-Code ! - sortieren */
void Print(WordList list, char* filename); /* Die Wortliste list in die Datei "WoList.Dat" schreiben */
/*----------------main-Funktion---------------------------*/ int main(int argc, char *argv[]) {
FILE *ein; Word wo; WordList list;
ein = fopen(argv[1], "r"); count = 0; GetWord(ein, wo, &len); while (!feof(ein) && count < ListLen-1) { if (len >= 2) Include(wo, list); GetWord(ein, wo, &len); } fclose(ein);
Sort(list); Print(list, "WoList0.Dat"); return 0;
}
/*---------------Implementierung der Funktionen-----------*/ void GetWord(FILE *ein, Word wo, int *length) { int i = 0; char ch = getc(ein); while ( ! isalpha(ch) && !feof(ein) ) ch = fgetc(ein); while ( isalpha(ch) && i < WordLen) { wo[i] = ch; ch = fgetc(ein); i++; } wo[i] = '\0'; *length = i; }
void Include(Word wo, WordList list) { int i; for (i=0; i<count; i++) if (strcmp(wo, list[i]) == 0) return; strcpy(list[count++], wo); }
void Sort(WordList list) { int i, j; Word wo; for (i=1; i<count; i++) { for (j=count-1; j>=i; j--) if (strcmp(list[j-1], list[j]) > 0) { strcpy(wo, list[j]); strcpy(list[j], list[j-1]); strcpy(list[j-1], wo); } } }
void Print(WordList list, char* filename) { FILE *aus; int i; aus = fopen(filename, "w"); for (i=0; i<count; i++) { if (i%4 == 0) fprintf(aus, "\n"); fprintf(aus, "%15s ", list[i]); } fprintf(aus, "\n\n %d Woerter \n", count); fclose(aus); }
|
-- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. |