C语言输入是怎么区分空格和回车的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言输入是怎么区分空格和回车的相关的知识,希望对你有一定的参考价值。

我想空格区分开和回车区分开比如要输入五个数字,scanf吗,都用什么函数

参考技术A C语言中回车,换行,空字符与空格:fgets和gets在读取换行符的区别
摘要:C语言中,我们常常从终端输入,并且输出到终端,键盘上的回车,输入到缓冲区以后,变成了什么字符?是‘\0’还是‘\n’?回车与换行有什么区别?本文主要为你讲解C语言中的换行、回车等控制字符,帮助区别它们的实质。
1.空格
它的ASCII码为0x20,而不是0x00。其中,gets可以读入空格字符。
2.回车(\r)
这里有一个很重要的区分点:回车符号和回车键。
回车(‘\r’)效果是输出回到本行行首,结果可能会将这一行之前的输出覆盖掉。例如执行:
puts("hello
world!\rxxx");
在终端输出的是:
xxxlo
world!
如果将上面的字符串写入文件中,例如执行:
char
*s
=
"hello
world!\rxxx";
FILE
*str
=
fopen("t.txt","r");
fwrite(s,
16,
1,
str);
用文本编辑器打开t.txt。显示的效果将由打开的编辑器所决定。
vi的效果为
windows记事本效果为
可以看到,vi将\t用^M代替,而记事本就没有显示该字符。
3.回车键
关于“回车键”的来历,还得从机械英文打字机说起。在机械英文打字机上,有一个部件叫“字车”,每打一个单词,“字车”就前进一格。当打满一行字符后,打字者就得推动“字车”到起始位置,这时打字机会有两个动作响应:一是“字车”被归位,二是滚筒上卷一行,以便开始输入下一行,这个推动“字车”的动作叫“回车”。后来,在电动英文打字机上,人们增加了一个直接起“回车”作用的键。这个新增的键就被称为“回车键”。
回车的ASCII代码
16进制是“0x0d”
10进制是“13”
在某些语言中可以用"\r"表示。
不同的操作系统对回车的处理是不同的:
在Unix/Linux系统中,换行用"\n"一个字符表示,
而在Windows系统中,则用"\n\r"两个字符表示。
4.换行(\n)10
如果要实现换行的效果,在终端我们只需要使用'\n'即可;如果要想在win系统下的文本中实现换行的效果,需要使用‘\n\r’两个控制字符
5.C语言对于字符串的处理
首先,回车键按下以后,键盘缓冲区中存放的是字符\n,如果我们用getchar,那么我们读入的是字符“\n”;如果我们使用gets进行读取,那么“\n”将被作为表示的结束的控制字符读取。然后,gets会自动把这个\n转换成'\0'存储在字符串中。
另外,如果从终端读取一个字符串,gets会把最后的换行符\n换成\0,而fgets从stdin读入的时候,不会对\n进行处理。

C语言:从键盘输入一篇英文文本,统计每个英文字母(分大小写)及空格、数字、回车和其他字符,咋编?

要求:
1)输入长短无限制,可有多行,以EOF结束。
2)输出格式为每一项目一行,如A:7,Space: 10等。
3)先输出数字,再输出大写字母,接着输出小写字母,最后输出空格、回车和其他字符。

程序代码:

#include <stdio.h>
#include <string.h>

#define MAX 10000

void input(char source[]);
void output(int sign[], int n);

void main()

char source[MAX];
int sign[256];
int i;

input(source);

for(i=0; i<256; i++)

sign[i] = 0;


//统计字符串中每个字符的数量
for(i=0; i<strlen(source); i++)

sign[source[i]]++;


output(sign, 256);


void input(char source[])

int i;

printf("input a string(end of EOF) : ");
for(i=0; i<MAX-1 && (source[i]=getchar())!=EOF; i++);
source[i] = \'\\0\';


void output(int sign[], int n)

int i;

//输出数字
for(i=\'0\'; i<\'0\'+10; i++)

printf("%c : %d\\n", (char) i, sign[i]);


//输出大写字母
for(i=\'A\'; i<\'A\'+26; i++)

printf("%c : %d\\n", (char) i, sign[i]);


//输出小写字母
for(i=\'a\'; i<\'a\'+26; i++)

printf("%c : %d\\n", (char) i, sign[i]);


//输出空格
i = 32;
printf("Space : %d\\n", sign[i]);

//输出回车
i = 10;
printf("Enter : %d\\n", sign[i]);

//输出其他字符
for(i=0; i<256; i++)

if(!(i>=\'0\' && i<=\'9\') && !(i>=\'A\' && i<=\'Z\') && !(i>=\'a\' && i<=\'z\') && i!=32 && i!=13)

printf("%c : %d\\n", (char) i, sign[i]);



运行测试:

参考技术A

代码文本:

#include "stdio.h"

int main(int argc,char *argv[])

int s[128],i,t;

for(i=0;i<128;s[i++]=0);

printf("Please enter a text...\\n");

while((i=getchar())!=EOF)

s[i]++;

for(t=i=0;i<128;i++)

if(s[i])

if(i>='a' && i<='z' || i>='A' && i<='Z' || i>='0' && i<='9')

printf("%c:\\t%d\\n",i,s[i]);

else if(s[i]!=' ' && s[i]!='\\n')

t++;

printf("Space:\\t%d\\n",s[' ']);

printf("Enter:\\t%d\\n",s['\\n']);

if(t)

printf("Other:\\t%d\\n",t);

return 0;

本回答被提问者采纳
参考技术B 可以用一个单重的循环实现,每次读入一个字符,再按字符的特征进行分类的统计计数。到最后,按规定的顺序输出各类字符的读数值。 参考技术C 从键盘输入一篇英文文本统计,每个英文字母分为大小写,空阔个数字。 参考技术D 键盘输入字符串,一旦回车,就输入结束了。
输入语句,也就结束了。
那么,每输入一行,只有一个回车,也必须有一个。
 
要求输入多行,就得执行多次输入语句。
最后,输入一个空白的行,仅有回车,结束全部输入。

以上是关于C语言输入是怎么区分空格和回车的的主要内容,如果未能解决你的问题,请参考以下文章

C语言:从键盘输入一篇英文文本,统计每个英文字母(分大小写)及空格、数字、回车和其他字符,咋编?

C语言 一行数据 空格分隔

C语言中输入一串以空格分隔的整型数据,怎么办?

c语言中怎样用scanf()读入带空格的字符串

在C语言中如何区分数组中的空格,并提取数组单个字符!求大神讲解!

c语言去除字符串左边空格、TAB键、换行符