casio1374633

导航

 

题目很简单:

一个交互式的程序,要求,输入 程序名 你的名字(参数1) 你的年龄(参数2)

输出如下格式:

你好 (参数1), 你明年的年龄是 (参数2+1)

-------------------------%<-------------------------

一直卡就卡在了参数2上面,因为argv[2]是字符串,要对字符串转换成整型然后数值加1才行.百思不得其解

后来在群里面讨论得到一个很好的算法

因为*(argv[2])能得到字符的ascii.然后利用公差求值.
我自己当时的想法是,设置2个变量,一个表示十位,一个表示各位.然后分别将指针指向的字符依次放入变量中,在输出时候使用%c%c的模式.
{这个算法的缺点在于,一个是关于9的进位问题,需要单独判断,另一个是现在这样只能保证最大年龄是98.但是活到100+也是很有可能的.故很复杂)

不过现在这个算法由于利用公差,把字符变成了真正的数字,所以可以进行数值计算了.就没有更多的担心.非常感谢群里的高人~~

程序如下:

#include <stdio.h>
#define ERROR "you should type exer_11.out your_name your_age"
#define need_all_num "you should input numbers on age . no other things"
#define age_out "your age is out of logical"

int main (int argc, char *argv[])
{
    int max_age = 0, i = 0;
    if ( argc != 3){            /*really three agrs?*/
        printf("\n"ERROR"\n");
        return 1;
    }
    while ( *(argv[2]+i) != '\0' ){
        if ( (*(argv[2]+i)) >= '0' && (*(argv[2]+i)) <= '9' ){
            max_age = max_age * 10 + (*(argv[2] + i)) -48;
            ++i;
        }        /*whether put all-number?*/
        else{
            printf("\n"need_all_num"\n");
            return 2;
        }

    }
    if ( max_age < 120 && max_age > 0 ) /*whether number logical?*/
        printf("\nHello %s, next year you will be %d\n",
                argv[1], 
                max_age+1
                );
    else
        printf("\n"age_out"\n");
        return 0;
}

--------------------%<---------------
更新:
希望不要打击读者...

使用atoi确实使方法变的更加简单了...
使用如下:

#include <stdio.h>
#define ERROR "you should type exer_11.out your_name your_age"
#define need_all_num "you should input numbers on age . no other things"
#define age_out "your age is out of logical"

int main (int argc, char *argv[])
{
    int max_age = 0, i = 0;
    if ( argc != 3){            /*really three agrs?*/
        printf("\n"ERROR"\n");
        return 1;
    }
    while ( *(argv[2]+i) != '\0' ){
        if ( (*(argv[2]+i)) >= '0' && (*(argv[2]+i)) <= '9' ){
            /* max_age = max_age * 10 + (*(argv[2] + i)) -48; */ max_age = atoi(argv[2]);
            ++i; 
        }        /*whether put all-number?*/
        else{
            printf("\n"need_all_num"\n");
            return 2;
        }

    }
    if ( max_age < 120 && max_age > 0 ) /*whether number logical?*/
        printf("\nHello %s, next year you will be %d\n",
                argv[1], 
                max_age+1
                );
    else
        printf("\n"age_out"\n");
        return 0;
}

 

posted on 2013-04-27 20:37  casio1374633  阅读(230)  评论(0编辑  收藏  举报