#include <stdio.h>
int main()
{
int countch=0;
int countwd=1;
printf("Enter your sentence in lowercase: ");
char ch='a';
while(ch!='\r')
{
ch=getche();
if(ch==' ')
countwd++;
else
countch++;
}
printf("\n Words =%d ",countwd);
printf("Characters = %d",countch-1);
getch();
}
Run Code Online (Sandbox Code Playgroud)
这是我遇到的程序\r.它在这里的作用究竟是什么?我是C的初学者,我很欣赏这方面的明确解释.
R..*_*R.. 14
'\r'是回车符.有用的主要时间是:
当以二进制模式读取文本或者可能来自外国操作系统时,由于Windows格式文本文件中的CR/LF行结尾,您会发现(并且可能想要丢弃)它.
当写入交互式终端时,stdout或者stderr,'\r'可用于将光标移回行的开头,用新内容覆盖它.这是一个很好的原始进度指标.
帖子中的示例代码绝对是一种错误的使用方式'\r'.它假定回车符将在输入行末尾的换行符之前,这是不可移植的,仅在Windows上为true.相反,代码应查找'\n'(换行符),并丢弃它在换行符之前找到的任何回车符.或者,它可以使用文本模式并让C库处理转换(但文本模式很难看,可能不应该使用).
Luc*_*ore 11
是的Carriage Return.资料来源:http://msdn.microsoft.com/en-us/library/6aw8xdf2(v=vs.80).aspx
以下重复循环,直到用户按下Return键.
while(ch!='\r')
{
ch=getche();
}
Run Code Online (Sandbox Code Playgroud)
曾几何时,人们有类似打字机的终端(只有大写字母,但这是另一个故事).搜索'Teletype',您认为如何tty使用'终端设备'?
这些设备有两个不同的动作.回车将打印头移回到行的开头而不滚动纸张; 换行符将纸张向上移动一行而不将打印头移回到行首.因此,在这些设备上,您需要两个控制字符才能使打印头返回到下一行的开头:回车符和换行符.因为这是机械的,所以需要时间,因此在发送CR和LF字符后,在向终端发送更多字符之前,必须暂停足够长的时间.没有LF的CR的一个用途是通过重击线上的字符来"加粗".您将该行写出一次,然后使用CR重新开始并在需要加粗的字符上打印两次.当然,你也可以输入你希望部分隐藏的东西,或者制作非常密集的ASCII艺术图片并明智地重击.
在Unix上,这些东西的所有逻辑都隐藏在终端驱动程序中.你可以使用stty命令和底层函数(ioctl()当时,调用;它们termios在1988年被POSIX.1 清理到接口中)来调整终端表现的各种方式.
最终,你得到了"玻璃终端",速度更快,而且还有新的特性需要处理 - 黑塞汀故障等等.这些被载入termcap后来的terminfo库中,然后进一步封装在curses库后面.
但是,其他一些(非Unix)系统也没有隐藏内容,你必须在文本文件中处理CRLF - 不,这不仅仅是在'CRLF'阵营中的Windows和DOS.
无论如何,在某些系统上,C库必须处理包含CRLF行结尾的文本文件,并向您呈现这些文件,就好像在行尾只有换行符一样.但是,如果您选择将文本文件视为二进制文件,您将看到CR字符以及LF.
旧Mac OS(版本9或更早版本)之类的系统仅使用CR(aka \r)作为行结尾.像DOS和Windows这样的系统(我相信很多DEC系统,如VMS和RSTS)都使用CRLF作为行结束.许多互联网标准(如邮件)要求CRLF行结束.并且Unix总是使用LF(也就是NL或换行符\n)来表示其行结尾.大多数人在大多数情况下设法忽略CR.
你的代码在寻找时非常时髦\r.在符合C标准的系统上,除非文件以二进制模式打开,否则您将看不到CR; CR运行时库将CRLF或CR映射到NL.
| 归档时间: |
|
| 查看次数: |
96593 次 |
| 最近记录: |