题目很简单:
一个交互式的程序,要求,输入 程序名 你的名字(参数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; }