突然诈尸了hhh,现在再去看之前的博客,发现现在啥也不会了,原来自己之前学过这么多东西,现在要开始慢慢复健了,也许会继续写写博客了。
最近终于搞清楚了一些输入的问题。
有一个叫做缓冲区的东西,从键盘上输入的所有的字符都会先依次存进去,也包括空格、回车、tab之类的字符。
先说说scanf
用户先输入数据,存到了缓冲区,直到用户按下回车,这个时候程序进入缓冲区把数据取出来供变量使用。但是它会把回车这个字符保留在缓冲区里面
scanf中的%d只识别“十进制整数”,空格,回车,tab都是数据与数据之间的分隔符,scanf在缓冲区读数据的时候,会自动忽略掉空格,回车,tab这些字符,已经读取到的字符和忽略的字符就被系统释放了
scanf可以按照给定格式输入,比如oj有个这样的题
输入三个百分数,可以scanf("%d%% %d%% %d%%", &a, &b, &c);%%表示一个%字符,这样就可以按照给定格式输入进去这三个数了。
scanf输入字符时,空格,回车,tab都会被读进去。还有个这样的题
可以先scanf("%d",&n);把n输进去,这个时候缓冲区还有个空格呢,所以要getchar()把这个空格给清了,然后scanf("%c %d", &ch, &num);这个时候缓冲区还是有个空格,这个时候再getchar(),否则ch就成了'\n'
然后是cin
cin也是这个缓冲的机制,同样在输入回车之后取数据,也会把回车留下来。但是cin在输入字符的时候会忽略掉空格、回车、tab
scanf和cin读字符串遇到空格就停了,要想读一整行的话,可以用gets(),然后再处理就行了
前几天还做了个这样的题
可以这么写while (gets(s) != NULL),gets()的返回值是个指针, 对于每一组数据, gets()把一行都读进来,然后再转换成int型的数就行
暂时这些就够用了,以后如果还需要一些其他的就再补充。