Zahlenfolge Zeichenweise einlesen
-
Guten Tag
Ich schreibe ein kleines Programm zur Bestimmung der Parity einer Bitfolge. Ich habe immer eine Eingabe von 7Bits und eine Ausgabe von 7Bit+1Bit Parity. Eingabe soll über die Tastatur erfolgen und zwar bitweise, ich tippe also eine Bitfolge z.B. 0010110 ein.
Vorgaben die eingehalten werden sollen:
-Erfassung der Eingabe mit getchar()
-Ein und Ausgabe sollen Datentyp unsigned char benutzenIch habe jetzt eine Weile probiert, komme aber mit der Erfassung der Eingabe auf keinen grünen Zweig. Ich habe einiges ausprobiert und momentan eine Version in welcher ich die Eingabe zeichenweise in ein Array aus unsigned char schreiben möchte. Lege ich das Array manuell auf eine Bitfolge, funktioniert die Auswertung und Ausgabe - die Hoffnung ist also noch nicht ganz verloren :). Hier mein Code, mein Problem liegt zwischen den Zeilen 9-14:
#include <stdio.h> void main() { int i=0, j=0, n=7, parity=0; unsigned char bit[8]={0}; unsigned char byte=0; // Eingabe printf("Bitfolge der Eingabe:\n"); for(i=0; i<n; i++) { while(bit[i]!='\n') bit[i]=getchar(); } // Anzahl 1er Bits bestimmen for(i=0; i<n; i++) { if(bit[i]==1)parity++; } // bei ungerader Anzahl von 1er Bits parity=1 if(parity&1)bit[7]=1; else(bit[8]=0); // chars aus dem Array "bit" einzeln auf die Bits in "byte" übertragen j=n+1; for(i=0; i<n+1; i++) { if(bit[i]==1) { byte=byte|(1<<j); } j--; } // Bitweise Ausgabe von "byte" for (i=n+1;i>0;i--) { if (byte & (1<<i)) printf("1"); else printf("0"); } }
Nach meiner Idee soll jeweils nur 1 Char eingelesen und ins Array "bit" an die i. Stelle geschrieben werden. Um einen Vorschlag wie ich das lösen könnte wär ich sehr dankbar.
Araex
-
So wie ich das sehe wird doch so lange an die Stelle i geschrieben, wie bit[i]!='\n' ist. Erst dann wird i erhöht. Wozu ist diese innere while Schleife überhaupt gut? Wenn du sie rausnimmst, hättest du das was du willst.
-
Die habe ich drinnen weil ich den Eindruck hatte, dass mir getchar() das return mit ins array schreibt. Ich habe mich dann (vorerst) damit zufrieden gegeben, dass ich bei der Eingabe nach jedem bit Enter drücke - was aber auch nicht funktionierte.
Wenn ich die while Schleife rausnehme funktioniert mein Programm allerdings auch nicht, die Ausgabe ist dann, egal welche Eingabe, "00000000". Daraus schliesse ich auf einen Fehler bei der Eingabe, oder mache ich da einen Denkfehler?
-
Araex schrieb:
Wenn ich die while Schleife rausnehme funktioniert mein Programm allerdings auch nicht, die Ausgabe ist dann, egal welche Eingabe, "00000000". Daraus schliesse ich auf einen Fehler bei der Eingabe, oder mache ich da einen Denkfehler?
Dann zeig mal den Code der dazu gehört. Das getchar hast du doch wohl dringelassen, oder?
-
SeppJ schrieb:
Dann zeig mal den Code der dazu gehört. Das getchar hast du doch wohl dringelassen, oder?
So sieht das aus:
// Eingabe printf("Bits eingeben\n"); for(i=0; i<n; i++) { bit[i]=getchar(); }
-
Die Eingabe sollte funktionieren, wie kommst du da auf "000000000"? Oder meinst du die Ausgabe des Endergebnisses? Denn die ist natürlich "000000000" wegen der anderen Fehler in deinem Programm. Dort machst du nämlich keinen Unterschied zwischen 0 und '0' bzw 1 und '1', dein Computer aber schon.
-
Ahhh.
Vielen Dank, das löst mein Problem. Wie doof von mir...