c语言问题 求高手解答

作者&投稿:华宰 (若有异议请与网页底部的电邮联系)
这是因为,输入空格,回车的时候,回车就被b 给读取到了,所以j 会比i 大一

从你的程序上看,你只判断了输入为空时退出,举个例子来说明吧:
如果你输入:ab c然后回车
那么很明显i的结果为3,当你在此输入“ab c”时,情况就变化啦,getchar()函数是从键盘输入缓存中取数据的,由于缓存中还存有第一次输入的字符 c 和一个回车'\n',故第二个do……while语句先执行了两次(此时j的值已经是2啦),然后再次执行b[j]=getchar();,至此已经不难解释j的结果就会变为2+3=5啦。
其实这跟getchar()函数本身有关。

我测试的结果一样啊

a b
2
2

注意你输入的方法 a空格b空格回车

这是两个do while循环语句吧,输两次好像一直在执行第一个do while,你试试把两个合并一下,

可能是因为中间有回车的原因,试试下面这样
#include<stdio.h>
int main()
{
int i=0,j=0,m,n=0;
char a[100],b[100];
do
{
i++;
a[i]=getch();
printf("%c",a[i]);

}
while(a[i]!=' ');
printf("%d\n",i);
do
{
j++;
b[j]=getch();
printf("%c",b[j]);
}
while(b[j]!=' ');
printf("%d\n",j);
}

C语言的疑问~

'\xxx'类型的字符常量中,xxx代表8进制整数,其含义是某字符的ASCII码。
而\483' 里483不是合法ASCII码范围。

你认为应该是多少呢?输出是正确的,其值就是a[0],它被初始化为1.1。因为fun中为s指针重新分配了指向,*s=*p1+*p2++;这一句中的s已不再指向a了。因为指针形参本身也是拷贝调用,所以main中的s仍然是指向a的,printf("%5.2f
",*s);输出自然是a[0]。可以这样验证,在fun中的*s=*p1+*p2++;后加一句printf("%5.2f
",*s);,它就应该输出11.1了……