[英]C Program to read number character by character giving incorrect result
#include<stdio.h>
#include<ctype.h>
int peekchar() {
int c;
c = getchar();
if (c != EOF) {
ungetc(c, stdin);
}
return c;
}
int readNumber(void) {
int c;
int accumulator = 0;
while ((c = peekchar() != EOF) && isdigit(c)) {
c = getchar();
accumulator *= 10;
accumulator += c - '0';
}
return accumulator;
}
int main() {
int result = readNumber();
printf("%d\n", result);
return 0;
}
我正在嘗試從標准輸入讀取以十進制表示法編寫的 integer,直到第一個非數字。 但它沒有給出正確的結果:
M1508444:CProg sb054043$ gcc -g3 readNumber.c -o readNumber
M1508444:CProg sb054043$ ./readNumber
123
0
有人可以幫我找出問題嗎?
問題在於運算符的優先級。 c = peekchar() != EOF
被分組為c = (peekchar() != EOF)
,因此c
為0
或1
,這說明了結果。
使用(c = peekchar()) != EOF
修復。
或者,假設為EOF
將isdigit
定義為0,則可以將循環條件簡化為
while (isdigit(c = peekchar())){
嗨,您需要像下面這樣修改while循環:
while ( (c = peekchar()) != EOF && isdigit(c)) {
c = getchar();
accumulator *= 10;
accumulator += c - '0';
}
首先,您需要讀取值並將其存儲在變量c
,這可以通過執行(c = peekchar())
。 一旦將值存儲在c
您的while loop
將首先檢查是否為EOF
如果不是),則僅會檢查其是否為數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.