gpt4 book ai didi

c - 正确扫描除 '+' 和 '-' 之外的字符

转载 作者:行者123 更新时间:2023-11-30 18:37:59 25 4
gpt4 key购买 nike

我正在尝试扫描算术表达式,例如:4+3-2*6*(3+4/2)#

我尝试的是以下代码。它运行良好,并正确扫描除 '+''-' 之外的每个字符。

Why it is not scanning only two particular characters!

void scan(){

int n,tmp,digit_no;
char c;
scanf("%c",&c);

while(c!='#'){


if(isdigit(c))
{

tmp=c;
scanf(" %d",&n);
digit_no=numPlaces(n);
n=(tmp-48)*ipow(10,digit_no)+n;
push_n(n);
n=0;
}
else if(c=='+' || c=='-' || c=='*' || c=='/' || c=='(' || c==')' || c=='=' || c=='^')
push_o(c);

scanf("%c",&c);

}


}

最佳答案

不要获取char,测试数字,扫描int,然后尝试将它们放在一起。这会导致代码的意图失败,例如 "3-2""1 23""1+23" 等输入解释者@John Bollinger因为 scanf("%d",&n) 正在消耗 + -

而是将数字放回stdin,然后扫描int

 if(isdigit(c)) {
ungetc(c, stdin);
scanf("%d",&n); // cannot fail as first character is a digit - may overflow though
push_n(n);
n=0;
}

还建议正确检测 EOF 并使用 is...() 函数。

// char c;
// scanf("%c",&c);
int c;
// while(c!='#'){
while((c = fgetc(stdin)) !='#' && c != EOF) {
...
// scanf("%c",&c);
}

详细信息:is...() 需要一个在 unsigned charEOF 范围内的 int 。当值为负数时,使用 char 调用它们会出现问题。

关于c - 正确扫描除 '+' 和 '-' 之外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209959/

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