Ascii转换错误

时间:2013-09-29 23:31:48

标签: c

这个程序编译正确,但是当我把一个数字放在32到127之间(正确的范围)时,它就完成了循环。任何人都可以告诉我一种方法我可以在第一个while循环中写入它如果我输入i(32-128)它继续,并在((i + 1)-128)之间输入j?

#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);
}

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

你需要从行

中删除'int'
int i= atoi(line);

int j= atoi(line);

只需将它们写为:

i= atoi(line);

j= atoi(line);

然后看看它是否有效。您的版本在循环体内再次重新声明这些变量,并且当while循环到达测试时它们的值将丢失。另外,正确的'逻辑或'运算符是'||'不是'|'。