确定。让我重新开始吧。我正在尝试编写一个程序来评估反向波兰表示法参数。 (即./program 2 4 +,评估为6)。
int main(int argc, char *argv[])
{
char oper[MAXOP];
char *ptr;
unsigned char c;
double op2;
while (--argc > 0 && ++argv != NULL) {
ptr = oper;
if (isdigit(c = **argv))
{
while (isdigit(c = **argv++))
{
*ptr++ = c;
}
*ptr = '\0';
push(atof(oper));
}
else if (isalpha(c))
{
while (isalpha(c = **argv++))
{
*ptr++ = c;
}
...
...
}
}
程序应该检查每个参数的第一个字符,如果它是alpha或数字或运算符,但它总是变成alpha。
+++++++++++++++++++++++++++++++++++++++++++++
嗯,这很奇怪。它现在正在运作。在此之前,
对于数字参数,isdigit(c = **argv)
没有评估为true(如果其余代码错误则无关紧要)。现在确实如此,但条件isdigit(c = **argv++)
是错误的。
应为isdigit(c = *argv[0]++)
。
我有两个同名的文件。它们位于不同的目录中,但包含相同的代码。使用这个时,我必须已经在另一个目录中并编译其他文件,因此尽管编辑了这个文件,但仍然获得相同的输出。我的坏。
答案 0 :(得分:3)
您是否尝试过使用调试器并弄清楚会发生什么?
我的第一个猜测是**argv++
是错误的(你是在增加argv?* argv?** argv?即使它没有错,也只是令人困惑的代码)。切换到:
char *cur_arg = *argv;
继续cur_arg(使用cur_arg ++来获取下一个字符,而不是c = * cur_arg ++ - 再次,令人困惑的代码)。
答案 1 :(得分:0)
#include <stdio.h>
#include <ctype.h>
#define MAXOP 16
int main(int argc, char *argv[]) {
char oper[MAXOP];
char *ptr;
unsigned char c;
double op2;
while(--argc > 0 && ++argv != NULL) {
ptr = oper;
if(isdigit(c = **argv)){
while(isdigit(c = *(*argv)++)){
*ptr++ = c;
}
*ptr = '\0';
printf("DEBUG:%s\n", oper);
} else if(ispunct(c)){//isalpha is alphabet check , '+' does not fit.
while(ispunct(c = *(*argv)++)){
*ptr++ = c;
}
*ptr = '\0';
printf("DEBUG:%s\n", oper);
}
}
return 0;
}