| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 812 人关注过本帖
标题:命令行参数问题
只看楼主 加入收藏
iceberg0
Rank: 1
等 级:新手上路
帖 子:37
专家分:9
注 册:2012-3-2
结帖率:0
收藏
 问题点数:0 回复次数:10 
命令行参数问题
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#define MAXOP 100
#define NUMBER '0'
int getop(char []);
void push(double);
double pop(void);
void ungetch(char []);
main(int argc, char *argv[])
{
     double op2;
     char s[MAXOP];
     while(--argc > 0)
     {
                  ungetch(" ");
                  ungetch(*++argv);
     
                  switch(getop(s)){
                                     case NUMBER:
                                          push(atof(s));
                                          break;
                                     case '+':
                                          push(pop()+pop());
                                          break;
                                     case '*':
                                          push(pop()*pop());
                                          break;
                                     case '-':
                                          op2 = pop();
                                          push(pop()-op2);
                                          break;
                                     case '/':
                                          op2 = pop();
                                          if(op2 != 0.0)
                                                 push(pop()/op2);
                                          else
                                               printf("error: zero divisor\n");
                                          break;
                                     default:
                                             printf("error: unkown command %s\n",s);
                                             argc = 1;
                                             break;
                        }
     }
     printf("\t%.8g\n", pop());
     return 0;
}
#define MAXVAL 100
int sp = 0;
double val[MAXVAL];
void push(double f)
{
     if(sp < MAXVAL)
             val[sp++] = f;
     else
         printf("error: stack full, can't push %g\n", f);
}
double pop(void)
{
       if(sp > 0)
             return val[--sp];
       else {
            printf("error: stack empty\n");
            return 0.0;
            }
}

int getop(char s[])
{
    int i,c;
    while((s[0] = c = getch()) == ' '||c == '\t')
                ;
    s[1] = '\0';
    if(!isdigit(c) && c != '.' && c != '-')
        return c;
    i = 0;
    if(c == '-')
    {
         if(isdigit(c = getch())||c == '.')
                      s[++i] = c;
         else
         {
             if(c!=EOF)
                       ungetch(c);
              return '-';
         }
    }
    if(isdigit(c))
      while(isdigit(s[++i] = c = getch()))
          ;
    if(c == '.')
       while(isdigit(s[++i] = c = getch()))
                            ;
    s[i] = '\0';
    if(c!=EOF)
              ungetch(c);
    return NUMBER;
}
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;
void ungetch(char a[])
{
     int i = 0;
     if(bufp >= BUFSIZE)
             printf("unget: too many charaters\n");
     else
             buf[bufp++] = a[i];
}
为什么我的程序没有输出结果?
搜索更多相关主题的帖子: include void double 
2012-08-11 23:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没输入参数就没有结果呗

授人以渔,不授人以鱼。
2012-08-12 00:19
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
最近老见用 --argc, ++argv 的方法处理命令行。这种技术是一度很流行吗?
2012-08-12 08:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用pangding在2012-8-12 08:48:38的发言:

最近老见用 --argc, ++argv 的方法处理命令行。这种技术是一度很流行吗?

好像是K&R曾经使用的方法

授人以渔,不授人以鱼。
2012-08-12 09:08
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
这是DOS时代的产物,Windows下可用但用的不方便。

★★★★★为人民服务★★★★★
2012-08-12 09:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下代码据说是K&R书中的例题:

程序代码:
#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
//#define ARGU

int getline(char *line,int max);

#if defined(ARGU)
/*find: print lines that match pattern from 1st arg */
int main(int argc,char *argv[])
{
    char line[MAXLINE];
    int found=0;

    if(argc!=2)
    printf("Usage: find pattern\n");
    else
    while(getline(line,MAXLINE) > 0)
        if(strstr(line,argv[1])!=NULL)
        {
        printf("%s",line);
        found++;
        }
    return found;
}
#else
int main(int argc,char *argv[])
{
    char line[MAXLINE];
    long lineno=0;
    int c,except=0,number=0,found=0;

    while(--argc > 0 && **++argv=='-')    //(*++argv)[0]
    while((c=*++(*argv)))    //*++argv[0]
        switch(c)
        {
        case 'x':
            except=1;
            break;
        case 'n':
            number=1;
            break;
        default :
            printf("find: illegal option %c\n",c);
            argc=0;
            found=-1;
            break;
        }
    if(argc!=1)
    printf("Usage: find -x -n(-xn) pattern\n");
    else
    while(getline(line,MAXLINE)>0)
    {
        lineno++;
        if((strstr(line,*argv)!=NULL)!=except)    //a good method
        {
        if(number)
            printf("%ld:",lineno);
        printf("%s",line);
        found++;
        }
    }
    return found;
}
#endif


/*getline:Input a line string */
int getline(char *s,int lim)
{
    char *sb=s;

    for(;s-sb<lim-1 && (*s=getchar())!=EOF && *s!='\n';s++)
    ;
    if(*s=='\n')
    *s++='\n';
    *s='\0';
    return s-sb;
}

授人以渔,不授人以鱼。
2012-08-12 09:38
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
哦,长见识了。
2012-08-12 10:42
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
在windows命令行中输入iexplore www.会怎样?www.就是命令行参数了,绝大部分应用程序都是运行命令行参数的.这在(类)UNIX系统下用得更多.

★★★★★为人民服务★★★★★
2012-08-12 16:18
iceberg0
Rank: 1
等 级:新手上路
帖 子:37
专家分:9
注 册:2012-3-2
收藏
得分:0 
我在命令行下  输入  程序名 2 3 4 + ×
却没有显示输出
2012-08-12 21:12
iceberg0
Rank: 1
等 级:新手上路
帖 子:37
专家分:9
注 册:2012-3-2
收藏
得分:0 
望指点!!!
2012-08-12 21:14
快速回复:命令行参数问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018829 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved