2013-09-29 93 views
-2

該程序編譯正確,但是當我把一個32到127之間的數字(正確的範圍)它完成循環。任何人都可以告訴我一種方法,我可以在第一個while循環中寫入它,如果我輸入i(32-128)它繼續,並在((i + 1)-128)之間輸入j?Ascii轉換錯誤

#include <stdlib.h> 
#include <stdio.h> 
#define LEN 64 

int main(){ 

    char line[LEN]; 
    int i=0; 
    int j=0; 

    while(i<32 | i>128) { 
     printf("Enter a #, 32-127: "); 
     fgets(line,LEN,stdin); 
     int i = atoi(line); 
} 
    while(j<=i | j>128) { 
     printf("Enter a second #, %d-127: ",i); 
     fgets(line,LEN,stdin); 
     int j = atoi(line); 
} 
    while(i<=j) { 
     printf("ASCII value of character %d: %c\n",i,i); 
     i++; 
} 

    return(EXIT_SUCCESS); 
} 
+0

請請使用fscanf而不是fgets和atoi! – goji

+1

如果你想檢查輸入,請在*之後檢查輸入,而不是之前。 –

+0

請勿使用按位運算符。 – SLaks

回答

0

您需要從線

int i= atoi(line); 

int j= atoi(line); 

刪除 '詮釋' 只寫他們如:

i= atoi(line); 

j= atoi(line); 

然後看看它是否工作。您的版本在循環體內再次聲明這些變量,並且while循環到達測試時,它們的值將丟失。此外,適當的'邏輯或'運算符是'||'不是'|'。

0

爲我的變化說明,請參見注釋:

#include <stdlib.h> 
#include <stdio.h> 

// not needed if you don't use a buffer 
//#define LEN 64 

int main(){ 
    // buffer not needed with fscanf 
    //char line[LEN]; 
    int i = 0; 
    int j = 0; 

    while(i < 32 || i > 128) { // use logical '||' not bitwise '|' 
     printf("Enter a #, 32-127: "); 
     fscanf(stdin, "%i", &i); // use fscanf instead of fgets, buffer and atoi 

     //fgets(line,LEN,stdin); 
     // you were assigning to a variable local to loop here which 
     // goes out of scope at end of loop 
     //int i = atoi(line); 
    } 

    while(j <= i | j > 128) { 
     printf("Enter a second #, %d-127: ",i); 
     fscanf(stdin, "%i", &j); 
    } 

    while(i <= j) { 
     printf("ASCII value of character %d: %c\n",i,i); 
     i++; 
} 

    return(EXIT_SUCCESS); 
}