c语言\r和getchar()的用法

2020-08-22 科技 139阅读
1、getchar和scanf函数都是从输入缓冲stdin里面读取数据,当我们遇到getchar或scanf时,如果输入一串信息后打回车后,这两个函数没有把stdin里面的数据读净,则当出现下一个getchar或scanf时会从stdin里面剩余的格式匹配的数据继续读取,这种情况下就要求在读取前清空stdin
比如:a=getchar(); 如果我们此时输入字符a后并回车,a和换行符都被送入了stdin中,该函数仅仅读取了a,在stdin里面会剩余下换行符,所以这个时候我们要用一个getchar(); 或fflush(stdin); 把这个换行符读走,否则下一个b=getchar(); 会读到换行符;
2、scanf函数的“格式控制字符串”中,如果有除了格式说明符以外的其他字符,则在输入的时候会按照类似于模式匹配的方式进行读取
比如: scanf("%dmmm%c", &n, &ch); 那么我们输入12mmmt 后,n获得12,ch获得字符t,如果我们不按照上面的形式输入,比如输入了12mmt后n会获得12,而由于后面少了个m,所以没有匹配上,此时ch就会读取不成功。
现在回到你的程序,scanf("%c\r%c\r%c\r%c",&a,&b,&c,&d); 此处的\r是一个换行符,当你输入a回车后这个回车正好和\r匹配,所以你写的语句恰好是利用了这一特点使得输入一个字符后接着回车再输入下一个。
另外,\r 和 \n 以及 \t 这几个转义字符有它的特殊性,我们输入的时候可以用空格、制表位等替代换行符,而上面说的m或者\b等其他字符时则不能以空格或换行来替代,它们必须完全匹配,比如 scanf("%c\t%c\101%c\r%c",&a,&b,&c,&d); 你输入的时候遇到\t或\r的情况下可以输入换行或空格,而遇到\101时必须输入A,也就是说可以按照下面的方式使得输入成功 a bAc d,而a b c d则后面的c和d都读不到想要的数据。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com