这个程序编译正确,但是当我把一个数字放在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);
}
答案 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循环到达测试时它们的值将丢失。另外,正确的'逻辑或'运算符是'||'不是'|'。