用%s输入字符串,在有效字符后面是有字符串结束符的,是不可见字符,你用%c输出就是乱码。
输出的内循环是不合适的,因为字符串长度不固定,你不能用for循环固定输出5个,可以改为for(int j=0;j<strlen(arr[i]);j++)
多个字符串的输入方式和单个字符串没有太大的区别,只是输入时参数变为两个:
C语言:scanf ( "%s%s" ,a,b )
C++:cin>>a>>b
看似没有什么特别的地方。但是这里有一个需要考虑的问题:编译器怎么区分输入的是两个字符串。换言之输入时什么符号作为这两个字符串的间隔?
将这个代码稍加改进,可以做以下的探究:
char a[20],b[20],c[20],d[20];
/* C++方式 */
cin>>a>>b; //输入 ab cd(中间有空格)
cout<<a<<'#'<<b<<endl; //输出 ab#cd
/* C方式 */
scanf("%s%s",c,d); //输入 mn pq(中间有空格)
printf("%s#%s",c,d); //输出 mn#pq
通过这一段代码我们可以清晰地看到作为分隔符的这个字符就是空格(当然回车也可以,但在这里不做讨论),也就是说使用cin和scanf(一般情况下)从键盘上输入的字符串不会读入空格,空格在此处是一个分隔符而不是输入串中的合法字符。
为了读入空格,除了对cin和scanf进行高级设置之外,还可以使用这几个可以读入空格的函数:
gets_s | vs2019/22中可使用 |
gets | Dev C++中可以使用 |
fgets | vs和Dev中都可以使用 |
下面就是对这几个函数使用方法的详细介绍: