本人初学者,c语言学习中碰到的6个问题,望大大解惑,谢谢

问题有点多啊,呵呵,谢谢大家的回答啊,分数最少15分,回答的好再加50分恩,谢谢啊。;-)
(1)
#include"stdio.h"
main(){
char a,b;
printf("please input two string:");
a=getchar();
b=getchar();
while(b!=0)
if(a==b)
printf("there are same numble");
else
printf("there are different numble");
getch();
}

输出是对的,就是满屏幕的there are same numble,停都停不下来恩

(2)
#include"stdio.h"
main()
{
int a[3],i,max;
printf("please input 10 numble");
for(i=0;i<=2;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<=2;i++)
if(a[i]>max)
max=a[i];
printf("%d",max);

getch();}

在scanf("%d",&a[i]);的%d后面加个空格,输出就会错误,这是为什么啊?

(3)
#include"stdio.h"
main(){
char st1[30]="my name is";
char st2[10];
printf("what you name? \n");
gets (st2);
strcat(st1,st2);
puts (st1);
getch();
}

strcat什么用?是不是把ST1和ST2合并,并将合并的值给ST1,gets以及puts函数里面不能加多组数组吗?如果可以,怎么加?
我尝试在ST2中输入》10的字符,可是程序依旧正常运行,这又是为什么?
难道要大于30个程序才会出错?那么ST2中的10是不是可以写成1?

(4)
#include"string.h"
main(){
static char st1[1],st2[]="welcome to my home";
strcpy(st1,st2);
puts (st1);
getch();
}

当我ST里面为1时候,ST2的值还是可以给ST1,那么ST1设为几?或者ST2为多长时,程序输出会出现错误?

(5)#include"stdio.h"
main()
{
int a[10],i,b;
printf("please input 10 numble");
for(i=0;i<=9;i++)
scanf("%d",a[i]);
printf("%d",a[i]);
getch();}

输入数字,字母显示为-36,我觉的这个程序很对啊。
大家回答详细点可以吗?我也刚学

(1)把while语句去掉.因为b是一个字符,不可能会等于0,所以b!=0这个条件恒为真,循环会一直做下去,不会终止
(2)scanf语句要求你输入的格式与编程的格式要一致,你加了一个空格,你在输入时就要加个空格.这样你的输入缓存中就多出了一个空格,程序在第二次执行scanf时就会把空格读进a[1],所以会出错.
(3)strcat是把str1的结束符'\0'去掉,然后把str2整个接到str1后面,并且存到str1中.gets和puts只能放一个数组名.不会的,不过只会读到你输入的数字的字符.
(4)道理跟(3)一样,只会显示一个字符.
(5)程序本身就是是不对的,要改成scanf("%d",&a[i]);如果改过来程序还是有问题,在while语句后一般只能跟一个语句,如果要跟多个语句就要用{}括起来.所以原程序先会把你输入的数存进数组a[],然后输出a[10],因为a[10]是不存在的,所以会输出一个随机数.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-01-31
1 你的循环条件一直满足,退不出来的
2 scanf的格式化序列中留个空格干吗呢?这样输入流中肯定要多出空格了吧,读入数据因此错误
3 strcat将后一个字符数组拼接至前一个,不是什么赋值。
puts,gets不就是行输入输出吗?
你在st2中输入那么多,最后难道没有截断吗?运行当然可以。
4 仍然是结果截断但可以运行嘛。
5 scanf("%d",&a[i])......

给你的建议:
找一本好书看,那些库函数在bible上都有详细的说明和用法,甚至他们是怎么写出来的。
另:C的很多库函数不会去检测你有意的逻辑错误,所以像那些溢出就会直接截断了。本回答被提问者采纳
第2个回答  2008-01-31
1.改为如下形式:
#include"stdio.h"
#include <conio.h> //用到了getch()函数,所以建议包含此文件
main(){
char a,b;
printf("please input two string:");

while ((a=getchar())!='\n'&&(a=getchar()))
{
if(a==b)
printf("there are same numble\n");
else
printf("there are different numble\n");

}

getch();
}

2.
如果%d后面有空格,那么在输入时,字符输入完成之后,还应该输入一个对应的空格。

3.strcat是连接字符串的函数,并且将连接后的字符串保存到ST1,gets()函数和puts()函数的参数只能是一个数组名。
输入的字符数大于10时依然可以运行,C会读取前10个字符存入数组。

4.原理同3,请尝试将char st1[1]为char *st1

5.输入数字时要用空格分隔。
第3个回答  2008-01-31
1、
char a,b;
if(a==b) ?
//两个字符型能这样比较?
while(b!=0) //死循环,改为while(b!="0") 表示输入0结束
2、
是规定
3、
strcat--连接
不能

4、
st1[1] //改为st1[255],
5、
int a[10],i,b; //b是干什么用的
scanf("%d",a[i]); //scanf("%d",&a[i]);
第4个回答  2008-01-31
(1) while(b!=0) --> while((b=getchar())!=0)
(5)for(i=0;i<=9;i++)
scanf("%d",a[i]);
printf("%d",a[i]);
改成
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
printf("%d",a[i]);
}
相似回答
大家正在搜