Problem bei Verwendung von array / pointern in Funktionen
-
Hallo allerseits,
studiere Angewandte Informatik 1. Semester, bin also Neuling auf dem Gebiet!Ich habe folgenden Sachverhalt:
Es wird verlangt die Prüfziffern von ISBN Nummern zu berechnen (sind auch noch andere Nummern gefordert, das Prinzip ist aber das gleiche und tut nichts zur Sache). Die ISBN Nummern lasse ich in ein char array einlesen (char und nicht int array, wegen der "-" und Leerzeichen die üblicherweise mit eingegeben werden). Die"-" und Leerzeichen eleminiere ich aus den Feldern (mit isdigit), so dass nur die Ziffern übrig bleiben.
Da ich mit der ISBN Berechnungen machen muss, wandel ich das char array mit atoi in ein int array um.Nun mein Problem:
1. Wie kann ich das eingelesene char array (in meiner input funktion) weiter verwenden z.b. zur Ausgabe in meiner output funktion?
2. Wie kann ich, wenn ich das char array in ein int array umgewandelt habe, das int array zu weiteren berechnungen verwenden?hier der quelltext von meiner input und output funktion, sowie die umwandlung von einem char array in ein int array:
// die IO header #ifndef IO_H #define IO_H void input(); void output(char isbn[], const int ISBN_GROESSE); const int ISBN_GROESSE = 27; const int EAN_GROESSE = 29; const int UIC_GROESSE = 25; int answer = 0; char isbn[ISBN_GROESSE]; char ean[EAN_GROESSE]; char uic[UIC_GROESSE];] // die IO .cpp #include "IO.h" #include<iostream> #include<string.h> void input() { printf("##### Pruefzifferfunktionen ######"); printf("\n\n0: Beenden \n1: ISBN \n2: EAN / GTIN\n3: UIC \n"); scanf("%d", &answer); switch(answer){ case 0: break; case 1: printf("Bitte geben Sie eine ISBN Nummer ein (ISBN-10 oder ISBN-13): "); getchar(); gets(isbn); break; case 2: printf("Bitte geben Sie eine EAN oder GTIN Nummer ein: "); getchar(); gets(ean); break; case 3: printf("Bitte geben Sie eine UIC Nummer ein: "); getchar(); gets(uic); break; default: printf("Fehler bei der Auswahl"); break; } } void output(char isbn[], const int ISBN_GROESSE) { printf("Die ISBN Nummer lautet: %s", isbn); } // und die Umwandlung von char array in int array #include"berechnungen.h" #include"IO.h" #include<iostream> void chartoint(char cnumbers[]) { char temp; const int len = sizeof(cnumbers) / sizeof(char); int inumbers[len]; for (int i = 0; i <= len; i++){ temp = cnumbers[i]; inumbers[i] = atoi(&temp); } } // und hier die Berechnung der ISBN-10 bzw. -13 int isbn_berechnung(int inumbers[], int parameter) // parameter entscheidet, ob prüfziffer verglichen werden soll oder zurückgegeben, 0 = vergleich, 1 = zurückgeben { int n = sizeof(inumbers) / sizeof(int); int pruefz = 0; int a = 1; int temp; if(n == 10){ for(int i = 1; i <= n-1; i++){ pruefz += i * inumbers[i]; } pruefz %= 11; } else if(n == 13){ for(int i = 1; i <= n-1; i++){ temp = inumbers[i]; if(temp % 2 == 0) a = 3; else if(temp % 2 != 0) a = 1; pruefz += a * inumbers[i]; } pruefz = 10 - pruefz; pruefz %= 10; pruefz %= 10; } else printf("ISBN ungueltig"); if(parameter == 0){ if(inumbers[n-1] == pruefz) return true; else return false;Vielen Dank im voraus!
-
Bis auf "include <iostream" C Code. Na was solls sein, C oder C++?
-
soll schon c++ sein (umgebung ist visual studio 2010), aber unser prof legt wert darauf, dass es allgemein gehalten wird und größtenteils für c++ aber auch für c gültig / verwendbar ist.
-
C != C++
!?!
-
ja ich weiß, aber es soll c++ sein...
-
kinske schrieb:
ja ich weiß, aber es soll c++ sein...
Bis auf das #include<iostream> ist das aber lupenreines C. Sollen wir alles umschreiben oder nimmst du einfach diese Zeile raus und machst dann eben C (das scheint alles zu sein, was du bisher kannst)?
-
Hmmm ok.
Also für mich würde jetzt der Unterschied zu C++ nur anstatt printf - cout zu verwenden und anstatt gets - cin.getline ausmachen.
Kommt darauf an, was alles umgeschrieben werden muss?
Ansonsten würde ich prinzipiell sagen weiter C verwenden, wenn es jedoch einfacher in C++ ist würde ich dieses bevorzugen
-
kinske schrieb:
Hmmm ok.
Also für mich würde jetzt der Unterschied zu C++ nur anstatt printf - cout zu verwenden und anstatt gets - cin.getline ausmachen.Wenn du unter C++ ein C mit cout und cin verstehst, dann bleib lieber bei C.
Kommt darauf an, was alles umgeschrieben werden muss?
Ansonsten würde ich prinzipiell sagen weiter C verwenden, wenn es jedoch einfacher in C++ ist würde ich dieses bevorzugen
C ist erst einmal einfacher, außerdem ist es das was du kannst. C++ wird stark gegenüber C, wenn man objektorientiert und/oder generisch programmieren möchte. Außerdem hat es eine größere Standardbibliothek die einige der furchtbarsten Sachen in C (Zeichenkettenverarbeitung, dynamische Speicherverwaltung) ziemlich vereinfacht.
-
Ich meinte das eher im Bezug nur auf meinen Quelltext.
Dann wäre mir eine Lösung in C++ lieber!
-
Du kannst keinen C++ Code verwenden, wenn "es auch für C gültig sein soll".
Globale Variablen sind Schrott.
Übergebe aus deinem aufrufenden Kontext den in der Funktion zu verarbeitenden Speicherbereich:int input(char (*s)[100]) { int answer; printf("##### Pruefzifferfunktionen ######"); printf("\n\n0: Beenden \n1: ISBN \n2: EAN / GTIN\n3: UIC \n"); if( 1!=scanf("%d", &answer)) return 0; while('\n'!=getchar()); switch(answer){ case 1: printf("Bitte geben Sie eine ISBN Nummer ein (ISBN-10 oder ISBN-13): "); break; case 2: printf("Bitte geben Sie eine EAN oder GTIN Nummer ein: "); break; case 3: printf("Bitte geben Sie eine UIC Nummer ein: "); break; default: printf("Fehler bei der Auswahl"); return 0; } fgets(*s,sizeof*s,stdin); if( strchr(*s,'\n') ) *strchr(*s,'\n')=0; else while('\n'!=getchar()); return answer; } ... char str[100]; int a = input(&str); ...