① C語言輸入是怎麼區分空格和回車的
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、直接對每個字元進行判斷,如果是其中一種,數目加一即可。
2、常式:
#include<stdio.h>
main()
{
intc,hs,kgs,zfbs;
hs=0,kgs=0,zfbs=0;/*初始化*/
while((c=getchar())!='#')
{
if(c==' ')
++hs;
if(c=='')
++kgs;
if(c==' ')
++zfbs;
}
printf("%d%d%d ",hs,kgs,zfbs);/*zbfs改為zfbs*/
}
/*nl,cl,bl可能是代錶行數,空格數,製表符數的英文縮寫*/
③ C語言 輸入10個字元,統計其中英文字母、空格或回車、數字字元和其他字元的個數。
你的程序 符號不對 用中文輸入法時要用半形的不要用全形的符號 或者直接以英文形式輸入
#include <stdio.h>
main( )
{
char c;
int letter=0,space=0,digit=0,other=0;
printf("i請輸入10個字元:\n");
while((c=getchar( ))!='\n') /*讀取當前字元,如不為回車符則進行統計*/
{
if(c>='a' &&c<='z'||c>='A'&&c<='Z')
letter++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
other++;
}
printf(" letter=%d,space=%d,digit=%d,other=%d\n",letter,space,digit,other);
}
④ C語言:從鍵盤輸入一篇英文文本,統計每個英文字母(分大小寫)及空格、數字、回車和其他字元,咋編
程序代碼:
#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] = '