[c]Bitoperatorrechner

Bismark

Erfahrenes Mitglied
Hi Leuts,
ich weis nicht ob ich "Betriebsblind" bin oder "unfähig" zu programmieren.

Ich soll etwas programmieren, wo man zwei Dezimalzahlen und ein Operator (&, |, ^, <<, >>) eingibt. Es soll den Ergebnis berechnen und Alle eingegebenen Zahlen und das Ergebnis in sowohl Dezimaler, hexadezimaler, Oktaler als auch Binärer-Form gleichzeitig ausgeben. Die Sachen sollen in Funktionen ausgelagert werden.

Das Problem ist bei der Definition von char getOperator() bei der Eingabeüberprüfung.

C:
#include <stdio.h>
#include "escapesequenzen.h"

void printFrame();
short getNumber();
char getOperator();
char askAgain();
short getNumber();

int main()
{
	short Op1, Op2;// Erg;
	char Op;
		
	//do
	//{	
	     //Eingabemaske ausgeben
	     printFrame();
             //1. Operator Eingeben
	     Op1 = getNumber(5);
	    // printInputNumber(5, Op1);
	     //Operator Eingeben
	     Op = getOperator();
	     //2.Operator eingeben
	     Op2= getNumber(7);
	     //printInputNumber(7, Op2); //Berechnet nur in Dezimal

	     //Ergebnis Berechnen
	     //Erg = calcResult(Op1, Op2, Op);
			
	     //1. Operanden ausgeben (in 4 versch. zahlensystemen)
	     //printResultNumber(12, Op1); // Gibt das Ergebnis aus 
	     //Operator Ausgeben
	     //printResultNumber(Op);
	     //2.Operanden Ausgeben
	     //printResultNumber(14, Op2);
             //Ergebnis Ausgeben
	     //printResultNumber(16, Erg);
						
	//} while(askAgain);
return 0;
}


/*
* Gibt den Ein- und Ausgaberahmen aus
* Parameter: keine
* Ergebis: Der Ausgegebene Rahmen
*/
void printFrame()
{
CLEAR;
HOME;

printf("|-------------------------------------------------------------------------|\n");
printf("|                                                                         |\n");
printf("| Bitoperator-Rechner                                                     |\n");
printf("|                                                                         |\n");
printf("| Eingabe Zahl 1:                                                         |\n");
printf("| Operator:                                                               |\n");
printf("| Eingabe Zahl 2:                                                         |\n");
printf("|                                                                         |\n");
printf("|-------------------------------------------------------------------------|\n");
printf("|                                                                         |\n");
printf("|          |   dez   |   okt.    |    hex.   |  Binaerdarstellung  |\n");
printf("| Zahl 1   |         |           |           |                     |\n");
printf("| Operator |         |           |           |                     |\n");
printf("| Zahl 2   |         |           |           |                     |\n");
printf("|-------------------------------------------------------------------------|\n");
printf("| Ergebnis |         |           |           |                            |\n");
printf("|                                                                         |\n");
printf("|-------------------------------------------------------------------------|\n");
}



/*******************************************************
* Liest ein operator Ein und prüft, ob dieser gültig ist.
* Parameter: keine
* Ergebis: der Eingelesene Operator
********************************************************/

char getOperator()
{
   char op;
   POSITION(6, 13);
   do
   {
      scanf("%c", op);
   
      while(op != '&' && op != '|' && op != '^' && op != '<<' && op != '>>')
      {
         printf("Kein richtiger Operator! Bitte Geben Sie &, |, ^, << oder >> ein");
      }
   } while(!op);	
   if(op != '\n')
   {
      clearBuffer();
   }

   return op;
}


/*******************************************************
* Liest eine Zahl ein und prüft, ob dieser gültig ist.
* Parameter: keine
* Ergebis: der eingelesene Zahl 
********************************************************/

short getNumber()
{
   //Definition
   short zahl, ScanErg;   //Eingabe und Eingabeüberprüfung
   
   do
   {
      ScanErg = scanf("%i", zahl);

        if(!ScanErg)
        {
           printf("Falsche Eingabe! Bitte Geben Sie eine ganze Zahl ein!");
        }

   } while(!ScanErg);

 
  if(zahl != '\n')
   {
      clearBuffer();
   }

   return zahl;
}


/*******************************************************
*Löscht den Tastaturpuffer nach der Eingabe
*Parameter: keine
*Ergebis: der gelöschte Tastaturpuffer
********************************************************/

void clearPuffer()
{
   char Dummy;                  //Definition für das löschen des Tastaturpuffers

   do
   {
      Dummy = getc(stdin);
   } while (Dummy != '\n');
}

Hier die fehlermeldungen:

91:58 C:\Users\...\ueb08.c [Warning] multi-character character constant
c:\Users\...\ueb08.c In function `getOperator':
91 C:\Users\...\ueb08.c [Warning] comparison is always true due to limited range of data type
91:72 C:\Users\...\ueb08\ueb08.c [Warning] multi-character character constant
91 C:\Users\...\ueb08.c [Warning] comparison is always true due to limited range of data type
[Linker error] undefined reference to `clearBuffer'
[Linker error] undefined reference to `clearBuffer'
91 C:\Users\...\ueb08.c ld returned 1 exit status



Hier die "escapesequenzen.h"
C:
#ifndef escapesequenzen_h
   #define escapesequenzen_h escapesequenzen_h

   #define POSITION(Ze, Sp)     printf("\033[%d;%dH",Ze,Sp)
   #define HOME                 printf("\033[H")
   #define UP(Anz)              printf("\033[%dA",Anz)
   #define UP_LINE              printf("\033[A")
   #define DOWN(Anz)            printf("\033[%dB",Anz)
   #define DOWN_LINE            printf("\033[B")
   #define RIGHT(Anz)           printf("\033[%dC",Anz)
   #define ONE_POS_RIGHT        printf("\033[C")
   #define LEFT(Anz)            printf("\033[%dD",Anz)
   #define ONE_POS_LEFT         printf("\033[D")

   #define STORE_POS            printf("\033[s")
   #define RESTORE_POS          printf("\033[u")
   #define ACT_POS              printf("\033[6n")

   #define CLEAR                printf("\033[2J")
   #define CLEAR_LINE           printf("\033[K")

   #define ATTRIBUTE_OFF        printf("\033[0m")
   #define BOLD                 printf("\033[1m")
   #define UNDERSCORE           printf("\033[4m")
   #define BLINK                printf("\033[5m")
   #define INVERSE              printf("\033[7m")
   #define INVISIBLE            printf("\033[8m")

   #define FORECOLOR_BLACK      printf("\033[30m")
   #define FORECOLOR_RED        printf("\033[31m")
   #define FORECOLOR_GREEN      printf("\033[32m")
   #define FORECOLOR_YELLOW     printf("\033[33m")
   #define FORECOLOR_BLUE       printf("\033[34m")
   #define FORECOLOR_VIOLETT    printf("\033[35m")
   #define FORECOLOR_KOBALT     printf("\033[36m")
   #define FORECOLOR_WHITE      printf("\033[37m")
   #define BACKCOLOR_BLACK      printf("\033[40m")
   #define BACKCOLOR_RED        printf("\033[41m")
   #define BACKCOLOR_GREEN      printf("\033[42m")
   #define BACKCOLOR_YELLOW     printf("\033[43m")
   #define BACKCOLOR_BLUE       printf("\033[44m")
   #define BACKCOLOR_VIOLETT    printf("\033[45m")
   #define BACKCOLOR_KOBALT     printf("\033[46m")
   #define BACKCOLOR_WHITE      printf("\033[47m")

   #define TEXT_BW_25_40        printf("\033[=0h")
   #define TEXT_COLOR_25_40     printf("\033[=1h")
   #define TEXT_BW_25_80        printf("\033[=2h")
   #define TEXT_COLOR_25_80     printf("\033[=3h")
   #define GRAFIC_COLOR_320_200 printf("\033[=4h")
   #define GRAFIC_BW_320_200    printf("\033[=5h")
   #define GRAFIC_BW_640_200    printf("\033[=6h")
   #define WRAP_MODE_ON         printf("\033[=7h")
   #define WRAP_MODE_OFF        printf("\033[=7l")
#endif
Lg Bismark
 
Zuletzt bearbeitet:
Hi,
Danke für die Hilfe.

habs gemacht Funktioniert:

C:
char getOperator()
{
   char op, ScanOp;
   POSITION(6, 13);
   do
   {
      ScanOp = scanf("%c", op);
   
      while(!ScanOp)
      {
         printf("Kein richtiger Operator! Bitte Geben Sie &, |, ^, << oder >> ein");
      }
   } while(!ScanOp);	
   if(op != '\n')
   {
      clearBuffer();
   }

   return op;
}


Hab noch eine Frage. Ich bokomme die ganze zeit die Fehlermeldung, dass die Funktion clearBuffer() eine undefinierte referenz sei.
Ich hab zwar heute morgen den fehler bemerk und definiert, aber funktioniert nicht.

Hier die Fehlermeldungen:

[Linker error] undefined reference to `clearBuffer'
[Linker error] undefined reference to `clearBuffer'
ld returned 1 exit status


Lg Bismark
 
Zuletzt bearbeitet:
Zurück