现在我们可以添加一些新功能了。首先,我们现在的print无法输出换行,所以,我们需要增加一个转义字符\n来进行换行。
如果当前字符为\并且下一个字符为n,那么进行换行,i++的目的是跳过下一个字符,否则会输出n。 我们使用下面的代码对我们的程序进行调试。
结果很成功。 接下来,我们上次还有一个问题还没有解决,那就是空格的问题。事实上,我们可以用gets(s)代替。gets的作用是读入一整行。
但是需要说明一个问题。新版本的C++编译器去掉了gets函数,因为不安全,可能会数组越界。部分编译器或许还会保留这个函数,但是不是每个编译器都通用的。所以,最好的方式是用fgets(s,字符串长度,stdin)代替。fgets是从文件读入,这里用stdin表示从标准输入来读入。 好了,我们来运行一下试试...???为什么是error?这里要注意,fgets会在最后添上一个'\n',导致输入的时候字符串以'\n'结尾,会出错。(末字符不是") 所以,我们进行输入之后,需要对输入进行处理,但这样做太麻烦了,我们干脆自制一个fgets好了。
这次应该行了...???怎么还是不行?我们用个巧办法吧。
我们不管三七二十一,先直接输入字符串,然后再看看问题所在。
输出结果:
注意到了没有?两个东西之前都有空格。所以,下一步,我们需要对空格进行控制。
这样就可以了。 对这段代码做一下解释。flag是一个标志,说明现在进行到了字符串的哪里,如果flag=0说明在开头,此时如果读到空格需要重新读入(因为要过滤掉一开始的空格);如果flag=1说明不在开头。读到第一个不为空格的字符说明不在开头,可以把这个空格读进来,顺便把flag的状态切换为1. 当然,我自己认为这个代码的风格还不算很好,毕竟使用到了goto和flag这个变量。各位读者也可以尝试自己改进这个代码,使得代码更加简洁。 这一篇就讲到这里,下一篇我们就尝试讲讲变量了。 |
|