2013-10-12 33 views
0

我想做一個程序,它有一個菜單系統,用戶可以選擇一個選項,輸入所需的數字,然後執行一些操作(在這種情況下,位移)和然後返回菜單。不過,在迄今這裏測試這個代碼是輸出:簡單的C菜單建設,Scanf不竄改輸入

    Main Menu  
       ---------  
1. Perform Left Bit Shift Operation (one value) 
2. Perform Right Bit Shift Operation (one value) 
3. Perform Binary AND Operation (two values) 
4. Perform Binary OR Operation (two values) 
5. Perform Binary One's Complement (~) Operation (one value) 
6. Perform Binary XOR Operation (two values) 
7. Quit 
1 


Entered Integer: 0 
Left Shifted: 0 

它完全跳過我的下兩篇scanf函數語句,只是打印了我初始化值是。什麼導致這個問題?此外,什麼是最簡單的方式來顯示一個整數表示爲一個位?我想有showbit(INT inttobit)做的是接受一個整數並打印其二進制表示(與32佔位符): EX:1234 = 00000000000000000000010011010010 不管怎麼說,這是下面我當前的代碼:

#include <stdio.h> 
#include <string.h> 
#include <math.h> 

void leftShift(int bit, int shift); 
void showBits(int inttobit); 

int main(void) 
{ 
    int option; 
    int value1=0,value2=0; 

    while (option != 7) 
    { 
     printf("\n"); 
     printf("    Main Menu \n "); 
     printf("    --------- \n"); 
     printf("1. Perform Left Bit Shift Operation (one value)\n"); 
     printf("2. Perform Right Bit Shift Operation (one value)\n"); 
     printf("3. Perform Binary AND Operation (two values)\n"); 
     printf("4. Perform Binary OR Operation (two values)\n"); 
     printf("5. Perform Binary One's Complement (~) Operation (one value)\n"); 
     printf("6. Perform Binary XOR Operation (two values)\n"); 
     printf("7. Quit \n"); 

     scanf("%d",&option); 

     if (option == 1) 
     { 
      scanf("Enter a base 10 Integer: %d ", &value1); 
      printf("\n"); 
      scanf("Enter number of places to shift bit: %d", &value2); 
      printf("\n"); 
      leftShift(value1, value2); 
     } 
     else if (option == 7) 
     { 
     break; /* break out of loop */ 
     } 
     else if (option < 0 || option > 9) 
     { 
      printf("Not an option... out of bounds\n"); 
     } 
     } 
     return(0); 
} 

void showBits(int inttobit) 
{ 
    printf("\n"); 
    printf("Integer entered: %d\n", inttobit); 
    printf("\n"); 
} 
void leftShift(int bit, int shift) 
{ 
    printf("Entered Integer: %d\n", bit); 
    printf("Left Shifted: %d\n", shift); 
} 

任何幫助或方向非常感謝!

回答

2
scanf("Enter a base 10 Integer: %d ", &value1); 

這將試圖掃描整個字符串,包括Enter ...文本。您需要printf提示和scanf只是輸入,是這樣的:

printf ("Enter a base 10 Integer: "); 
scanf ("%d ", &value1); 

但是請記住,這仍然不是非常穩健的輸入代碼。示例代碼很好,但您希望生產代碼更好一些。