Итак, я понимаю, что такое функция getop и как она работает, не понимая циклов while, которые проверяют целочисленную и дробную часть входных данных и помещают их в массив s.
So i 'мы пытались записать эти циклы while стандартным способом (выражение в скобках, а затем приведенные ниже выражения в скобках).
поэтому вместо цикла while:
while(isdigit(s[++i] = c = getch())){
;
}
почему нельзя:
while(isdigit(c = getch())){
s[++i] = c;
}
Полная функция getop:
int getop(char s[]){
int i, c;
while((s[0] = c = getch()) == ' ' || c == '\t'){
; //set s[0] to the first non space/tab char
}
s[1] = '\0'; //s[1] to \0
if(isdigit(c) == 0 && c != '.' && c != '-'){
return c; //if not a digit or . then return(must be a +,-,/,*)
}
i = 0;
if(isdigit(c)){
while(isdigit(s[++i] = c = getch())){
; //integer part
}
}
if(c == '.'){
while(isdigit(s[++i] = c = getch())){
; //fraction part
}
}
s[i] = '\0';
if(c != EOF){
ungetch(c);
}
return NUMBER;
}
Однако выходные данные не совпадают, последний вход по какой-то причине обрезается при использовании альтернативного цикла while.Таким образом, ввод 123 возвращает 12.