正确的代码应该是这样:
#include
main()
{
int
n=0;
char
ch;
while((ch=getchar())!='\n')
{if(ch>='0'&&ch<='9')
n=n*10+ch-'0';
}
printf("%d",n);
}
至于这句n=n*10+ch-'0';
ch-'0'就是把字符型的数字转换成整形的数字,因为getchar()接受的是char型的。
举个例子,比如你输入“
1
2
3”,程序开始检测:
跳过第一个空格,检测到字符'1',通过'1'-'0'得到整形数字1,n
=
0*10
+
1
=
1.
跳过第二个空格,检测到字符'2',通过'2'-'0'得到整形数字2,n
=
1*10
+
2
=
12.
跳过第三个空格,检测到字符'3',通过'3'-'0'得到整形数字3,n
=
12*10
+
3
=
123.
输出n为123.
都是一些基础性错误
比如:
1、一个等号是赋值,两个等号用来判断是否相等
2、if-等语句没有加大括号
3、字符串结束标识是'\0',不是字符'0'
4、字符串赋值时,在最后要加上字符串结束符
5、子函数局部变量的地址返回后可能无效
#include
#include
int main()
{
void fanxv(char a[], char z[]);
char a[10000];
char c[10000];
gets(a);
fanxv(a, c);
puts(c);
return 0;
}
void fanxv(char a[], char z[])
{
int j;
int zhong;
for (j = 0; j <= 10000; j++)
{
if (a[j] == '\0')/////////////////
{
zhong = j;
break;
}
}
j--;
for (int i = 0; i <= 10000; i++)
{
z[i] = a[j];
j--;
if (j< 0)///////////
break;
}
z[zhong] = '\0';
}
第一个Error:类型不匹配。fanxv函数返回的是char类型,c是字符数组,当然无法被赋值。
第二个Error:z是字符数组,fanxv函数返回的应该是char类型。
第一个Waring:z是本地变量,函数中临时申请的,函数结束则z数组内存就会被释放,返回这个没有意义。
第二个Waring:最后多打个回车吧。