-2

这个程序可以正确编译,但是当我输入一个介于 32 和 127 之间的数字(正确的范围)时,它会完成循环。谁能告诉我一种方法,如果我输入 i (32-128) 它继续,并且在 ((i+1)-128) 之间输入 j,我可以将它写在第一个 while 循环的哪个位置?

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

2 回答 2

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);
}
于 2013-09-29T23:42:51.460 回答
0

您需要从行中删除“int”

int i= atoi(line);

int j= atoi(line);

只需将它们写为:

i= atoi(line);

j= atoi(line);

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

于 2013-09-29T23:46:24.847 回答