scanf() Problem (binär dezimal hexdezimal mit logischen verknüpfungen)

max26

Grünschnabel
Guten Nachmittag, liebes Forum!

Ich sitze schon seit einiger zeit vor einem Problem:
Das einlesen einer char variable
Unabhängig vom Programmbeispiel rattert das Programm nach dem zweiten scanf() durch!
Ich benutze dev-cpp.

Warum

PHP:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void printbin(int in, int size);
int scanbin(int size);

int main(int argc, char *argv[])
{
    int a, b, c;
    char op='\0', in='\0';

    printf("Format der 1.Zahl: h,b,d: ");
    scanf("%c", &in);
    switch(in){
      case 'h':
           scanf("%x", &a);
           break;
           
      case 'b':
           a=scanbin(8);
           break;
           
      case 'd':
           scanf("%i", &a);
           break;    
    }
    
    
    printf("Operator: &,|,^(x): ");
    scanf("%c", &op);
    
    
    printf("\nFormat der 2.Zahl: h,b,d: ");
    scanf("%c", &in);
    switch(in){
      case 'h':
           scanf("%x", &b);
           break;
           
      case 'b':
           b=scanbin(8);
           break;
           
      case 'd':
           scanf("%i", &b);
           break;    
    }
    
    
  //  system("cls");
    switch(op){
      case '&':
               printf("\n\nc=a&b\n\n  ");
               printbin(a,8);
               printf(" = %i\n& ", a);
               printbin(b,8);
               printf(" = %i\n------------------------------\n  ", b);
               c=a&b;
               printbin(c,8); printf(" = %i\n\n\n\n", c);
           break;
           
      case 'x':
               printf("\n\nc=a^b\n\n  ");
               printbin(a,8);
               printf(" = %i\n^ ", a);
               printbin(b,8);
               printf(" = %i\n------------------------------\n  ", b);
               c=a^b;
               printbin(c,8); printf(" = %i\n\n\n\n", c);
           break;
           
      case '|':
               printf("\n\nc=a|b\n\n  ");
               printbin(a,8);
               printf(" = %i\n| ", a);
               printbin(b,8);
               printf(" = %i\n------------------------------\n  ", b);
               c=a|b;
               printbin(c,8); printf(" = %i\n\n\n\n", c);
           break;    
    }
    

    

  
  system("PAUSE");	
  return 0;
}

void printbin(int in, int size)
{
   int i,bin[size];

   for(i=0; i<size;i++){
     bin[i]=in%2;
     in/=2;                
   }   
   
   for(i=size-1;i>=0;i--){
     printf("%i", bin[i]);   
     if(i%4==0)
       printf(" ");
   }    
}

int scanbin(int size)
{
    int i, bin[size], sum=0;
    for(i=size-1;i>=0;i--)
      scanf("%i", &bin[i]);
      
    for(i=0;i<size;i++)
      sum += bin[i]*pow(2,i);
      
    return sum;
}
 
Hi.

Du solltest Leerzeichen (wie ' ', '\n', '\t' usw.) ignorieren wenn du die einzelnen Zeichen einliest.

Dazu reicht es aus, wenn du ein Leerzeichen am Anfang in den Formatstring schreibst:
C:
scanf(" %c", &in);
Du solltest außerdem prüfen ob überhaupt etwas eingelesen wurde bevor du weiterrechnest.

Gruß
 
Zurück