簡體   English   中英

C 程序逐字符讀取數字,結果不正確

[英]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) ,因此c01 ,這說明了結果。

使用(c = peekchar()) != EOF修復。

或者,假設為EOFisdigit定義為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM