二级C语言的题

#include "stdio.h"
main(int argc,char *argv[])
{int n=0,i;
for(i=1;i<argc;i++) n=n*10+argv[i]-'0';
printf("%d\n",n);}
编译连接生成可执行文件TT.EXE 若输入以下命令行:tt 12 345 678
程序运行后输出的结果是:答案是136

不知道怎么来的,高人帮帮偶

n=n*10+argv[i]-'0';
这里是否应该是argv[i][0]???
argv[i]是一个指针,谁知道这个指针地址是多少?

如果是n=n*10+argv[i][0]-'0';的话,答案就是136
因为执行的时候输入了3个参数:12 345 678
这3个参数被作为字符串输入给argv[1],argv[2],argv[3]
所以argv[i][0]就分别是'1' '3' '6'
然后n的计算就简单了,第一次循环是n=1,第二次循环,n=13,第三次循环n=136,每次计算会把之前的n乘以10再加上argv[i][0]与'0'的差值
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-09-01
argc argument count的缩写,是指示程序入口参数个数 这里是4(分别为tt、12、345、678)
argv argument value的缩写,是指示程序入口参数字符数组 这里argv[0]="tt",argv[1]="12",argv[2]="345",argv[3]="678"
你的程序是编译不通过的,因为argv[i]是字符指针,应该少一个*,代码如下
#include <stdio.h>
void main(int argc,char *argv[])
{int n=0,i;
for(i=1;i<argc;i++)
n=n*10+*argv[i]-'0';
printf("%d\n",n);
}
i=1时,*argv[1]是被强制类型转化为字符串第一个字符'1'的整形值,-'0'后就是1了,i=2时,*argv[2]是被强制类型转化为字符串第一个字符'3'的整形值,-'0'后就是3了,加上前面的1*10就是13;同样最后结果为136
第2个回答  2009-09-01
答案是:136

tt 12 345 678

tt.exe是程序的名字
后面带3个命令行参数(字符串类型的)

main()函数中的
argc是参数的个数(int类型),也就是3个(12 345 678)
argv是保存参数的二维字符数组
argv[0]指向程序路径: "tt.exe"
argv[1]指向第一个参数:"12"
argv[2]指向第二个参数:"345"
argv[3]指向第三个参数:"678"

显然
*argv[1] = '1' n=n*10+argv[i]-'0'; n = 1
*argv[2] = '3' n=n*10+argv[i]-'0'; n = 13
*argv[3] = '6' n=n*10+argv[i]-'0'; n = 136
相似回答