gpt4 book ai didi

C程序逐个字符读取数字给出不正确的结果

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:35 25 4
gpt4 key购买 nike

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

我正在尝试从标准输入中读取一个以十进制表示法编写的整数,直到第一个非数字。但它没有给出正确的结果:

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 修复。

或者,假设 isdigit 对于 EOF 定义为 0,您的循环条件可以简化为

while (isdigit(c = peekchar())){

关于C程序逐个字符读取数字给出不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49508837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com