都匀网站建设公司,中国制造网怎么样,云网站建设017年青,室内设计网站免费素材1.博主在学习C语言时#xff0c;也没太关注C语言的一些细节问题#xff0c;导致后面有人问问题的时候一时没回答出来#xff0c;也就是所谓的基础不牢地动山摇#xff0c;比如这一次有同学问的scanf键盘输入的小问题#xff0c;折腾了一阵子还是想出来问题所在。
2.废话不…1.博主在学习C语言时也没太关注C语言的一些细节问题导致后面有人问问题的时候一时没回答出来也就是所谓的基础不牢地动山摇比如这一次有同学问的scanf键盘输入的小问题折腾了一阵子还是想出来问题所在。
2.废话不多说要实现的是键盘输入小写字母字符串然后转换成大写输出代码如下
#include stdio.hint main()
{char str[10];int i,n;printf(输入长度n:);scanf(%d,n);printf(输入字符串长度%d:,n);for ( i 0; i n; i){scanf(%c,str[i]);if (str[i]a str[i]z){str[i] str[i]-32;}}for ( i 0; i n; i){printf(%c,str[i]);}return 0;}
然后我输入和输出的结果如下 问题来了为什么只输出AS很多小朋友可能就一脸懵了
但是聪明的朋友也很容易发现到唉这个AS和输入字符串的中间输出一个空白行也就是如下图红色框起来的是空白行这是为什么呢 这个玄幻的东西我们就得从代码内容讲起
在代码中我们首先输入长度n然后到输入字符串是不是对问题就出现在这里。
当我们在输入长度n时然后回车是不是也就是说我们键盘输入两次了n输入一次回车键算一次当然我们都知道scanf是以空格为结束一次输入回车也是空格但是可能大家忽略了回车\n属于字符后面的scanf以%c接收因此我们在上一个scanf输入n然后回车时回车被后面的第一次for循环的str[0]接收所以str[0]值是\nstr[1]值是astr[2]值是s因此在输出的时候就出现了上面的结果输出空白的一行实际上是输出回车然后输出AS怎么解决呢
3.两种解决办法
1加一个scanf接收回车,代码如下我加了一行 scanf(%c,m);用于接收输入n后的回车
#include stdio.hint main()
{char str[10],m;int i,n;printf(输入长度n:);scanf(%d,n);printf(输入字符串长度%d:,n);scanf(%c,m);for ( i 0; i n; i){scanf(%c,str[i]);if (str[i]a str[i]z){str[i] str[i]-32;}}for ( i 0; i n; i){printf(%c,str[i]);}return 0;}
2%c前加空格代码如下
#include stdio.hint main()
{char str[10];int i,n;printf(输入长度n:);scanf(%d,n);printf(输入字符串长度%d:,n);for ( i 0; i n; i){scanf( %c,str[i]);if (str[i]a str[i]z){str[i] str[i]-32;}}for ( i 0; i n; i){printf(%c,str[i]);}return 0;}
为什么scanf( %c,str[i]);的%c前面加空格因为在scanf中比如scanf(%c %c %c,n)这样的话就不会以空格结束输入而是以空格作为这三个的输入分隔符。
因此在%c前面加空格也就是从输入n到输入n个字符是以空格回车也属于空格隔开输入因此%c不会读取回车那么str[0]就不会是\n这个时候结果正确如下 输出也不再留有空白一行。