一个C语言字符串输入问题

#include<stdio.h>void main(){ char s1[50],s2[50]; scanf("%s",s1); scanf("%s",s2); printf("%s\n",s1); printf("%s\n",s2);}为什么我输入i am后就是这种情况,感觉只要有空格就会出问题

我也试了一下,没问题,你到底是什么问题,是要在s1或s2中输入空格吗?那么用gets函数;
gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加'\0'字符。
其调用格式为:gets(s);   
其中s为字符串变量(字符串数组名或字符串指针)。   
gets(s)函数与scanf("%s:",&s)/* scanf("%s",s) */相似,但不完全相同,使用scanf("%s",&s);函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
你改为:
#include<stdio.h>
void main()
{ char s1[50],s2[50];
gets(s1);
gets(s2);
printf("%s\n",s1);
printf("%s\n",s2);
}
这样就用回车表示输入结束
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-06
就是一个while循环,意思:当(符合条件-->继续循环){ 上面那个while里的条件不为true时不执行这里的代码 }还有一种是do……while

//ch接收输入并判断输入是不是不等于'#',并且判断oldch是否等于'#',当两个变量的值的或为真时执行中括号里的代码
while((ch=getchar())!='#'||oldch!='#'){
//给K赋值为0
k=0;
//当ch不等于#并且k的值小于MAXLEN-1时执行中括号里的代码
while(ch!='#'&& k< MAXLEN-1){
//将ch的值赋给数组str,下标为k,然后下标k加1
str[k++]=ch;
//ch继续接收输入
ch=getchar();
}
//当上面那个while条件不符时,执行这里的代码,将#赋给oldch
oldch='#';
//将'\0'赋给下标为k的数组str
str[k]='\0';
/*fill_b*/
//给len赋值0
len=0;
//for循环,将数组的长度赋值给len
for(i=0;str[i];i++)
len++;
/*fill_e*/
//输出len
printf("%d\n",len);
}
第2个回答  2011-05-06
外 while((ch=getchar())!='#'||oldch!='#') 判断是否连续2个#,如果是就不进入循环退出;

内while(ch!='#'&& k< MAXLEN-1) 一直读数据,读到有一个#,或者太长;

整个过程是:
1)检查是不是2个# while((ch=getchar())!='#'||oldch!='#')
2) 读入一句 while(ch!='#'&& k< MAXLEN-1)
3) 把字符串最后置0 str[k]='\0';
4) 计算长度 for(i=0;str[i];i++)

要是我写就不会这么麻烦,长度可以直接在第二个循环中做到;
第3个回答  2019-08-05
char
a;
只能放一个字符,字符串是字符的数组,可以定义
char
b[10];
就可以放10个字符
第4个回答  2011-12-01
我试了一下,没有问题啊
相似回答