【心得】Ctrl+Z、\n、\0、eof的區別和用法

從scanf談起:

一:scanf的返回值:讀入的域的個數

int scanf(
const char *format [,
argument]...
);
int _scanf_l(
const char *format,
locale_t locale [,
argument]...
);
int wscanf(
const wchar_t *format [,
argument]...
);
int _wscanf_l(
const wchar_t *format,
locale_t locale [,
argument]...
);

Return Value
Returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned.
If format is a NULL pointer, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, these functions return EOF and set errno to EINVAL.
For information on these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

// crt_scanf.c
// compile with: /W3
/* This program uses the scanf and wscanf functions
* to read formatted input.
*/
#include <stdio.h>
int main( void )
{int i, result;float fp;char c, s[81];wchar_t wc, ws[81];result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996// Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_sprintf( "The number of fields input is %d\n", result );printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996wprintf( L"The number of fields input is %d\n", result );wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}71 98.6 h z Byte characters
36 92.3 y n Wide charactersThe number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

二、scanf對特殊符號的返回值

  • 自然數:符合輸入格式的數據的個數

  • 0:不符合輸入格式的數據(如果Ctrl+Z和回車鍵之間有其他字符,則也返回0)

      以"%d"為例:要求是十進制整數,如果輸入字符'r'、'e'、'\'等,就返回0,自然地,'\n''\0''eof'也返回0,這與他們本身的含義(比如換行符、終止符、文件結束符)并無關系
  • -1:Ctrl+Z(緊接著按下回車鍵)

三、輸入流中Ctrl+Z的含義

注:Windows系統中一般采用阻塞式檢查 Ctrl+Z、Unix/Linux系統下一般采用非阻塞式的檢查 Ctrl+D。本程序是在Windows系統下,因此使用阻塞式的 Ctrl+Z 來標識流的結束。

阻塞式方式的特點:

  1. 只有按下回車之后才有可能檢測在此之前是否有Ctrl+Z按下。

  2. (按照輸入時間順序讀取輸入緩沖區的數據)讀取到Ctrl+Z時,如果后面有可讀的數據,則不會理睬Ctrl+Z,也就是不認為Ctrl+Z代表著流的末尾。(因為有要讀的數據,還不能認為到了流的末尾)。

  3. Ctrl+Z產生的不是一個普通的ASCII碼值,也就是說它產生的不是一個字符,所以不會跟其它從鍵盤上輸入的字符一樣能夠存放在輸入緩沖區。

四、鍵盤輸入時回車鍵的作用:

將鍵盤上敲下的字符送入輸入緩沖區。

如果用戶在按回車鍵之前輸入了不只一個字符,其他字符會保留在鍵盤緩沖區中,等待后續的輸入函數(比如scanf()、getchar())調用讀取。也就是說,后續的scanf()調用不會等待用戶按鍵,而是直接讀取緩沖區中的字符,直到緩沖區的字符讀取完畢后,才等待用戶按鍵。

對于scanf(),只有字符char在輸入流中的獲取會承認空格或回車中的換行符為所要取的值,別的如字符串或者字符數組或int類型均不認為空格或回車中的換行符為其值即丟棄空格符和回車符,以空格作為劃分。

五、那換行符'\n'、終止符'\0'、文件結束符'eof'是干嘛的

  1. '\n'、'\0'、'eof'是C/C++編譯器在編譯代碼時識別的符號。

  2. Ctrl+Z是操作系統在處理輸入流時識別的符號。

'\n'換行符,

#include <stdio.h>
int main()
{int c;do{printf("請輸入文檔的結尾標志");}while((c=getchar())!='\n');printf("已得到文檔結束標志\n");    //直接回車return 0;
} 

'\0'終止符
'\0' is the null termination character. It marks the end of the string.

char cAlphabet[] = "I know all about programming!";

is the same as

char cAlphabet[] = {'I',' ', 'k','n','o','w',' ','a','l','l',' ','a','b','o','u','t',' ','p','r','o','g','r','a','m','i','n','g','!','\0'};
#include <stdio.h>
int main()
{int c;do{printf("請輸入文檔的結尾標志");}while((c=getchar())!='\0');printf("已得到文檔結束標志\n");return 0;
} 

'eof'文件結束符

#include <stdio.h>
int main()
{int c;do{printf("請輸入文檔的結尾標志");}while((c=getchar())!=EOF);printf("已得到文檔結束標志\n");    //Ctrl+Z然后回車return 0;
} 

在控制臺輸入的時候,操作系統將Ctrl+Z翻譯為文檔結束符。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260985.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260985.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260985.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MVC-05 Model(1)

在開發應用程序的過程中&#xff0c;經常需要處理許多大大小小的數據&#xff0c;例如&#xff0c;SQL Server數據庫存取、連接AD(Active Directory&#xff09;數據庫進行驗證、調用外部Web Service取得數據等。除了訪問數據外&#xff0c;也經常需要對數據做成格式驗證、邏輯…

計算機 數據庫知識點,數據庫知識點總結

實體&#xff0d;聯系模型基本概念實體和屬性實體是客觀存在并且可以相互區分的任何事物屬性是實體所代表事物具有的某種特性每個屬性都有一定的取值范圍&#xff0c;成為該屬性的值域實體集和碼實體集是具有相同屬性的實體的集合實體的值是該實體諸屬性值的列表實體集的值是該…

計算機網絡課程思政教學設計,信息與網絡工程學院成功舉辦第一屆課程思政教學設計大賽...

為有效貫徹全國高校思想政治工作會議精神&#xff0c;強化課程思政建設&#xff0c;全面提高人才培養質量&#xff0c;根據《教務處關于舉辦第一屆課程思政教學設計大賽的通知》要求&#xff0c;結合學院工作安排&#xff0c;7月18日&#xff0c;信息與網絡工程學院在龍湖校區西…

Java 中參數傳遞是傳值還是引用?

2019獨角獸企業重金招聘Python工程師標準>>> 明確概念 值傳遞&#xff1a;指的是將變量的一個備份傳過去&#xff0c;當該備份被修改后&#xff0c;不會影響原來變量的值&#xff1b; 引用傳遞&#xff1a;指的是將該變量的地址傳過去&#xff0c;當值修改后&#x…

sencha touch 手勢識別左右滑動

sencha touch 中添加手勢識別非常簡單&#xff0c;就是監聽 dom 元素的 move 事件&#xff1a; 1. 為你的 view 注冊 swipe 事件 // 為當前 view 注冊手勢滑動事件 Ext.get(myTouchView).on(swipe, onViewSwipe, this); 2. 判斷滑動方向 // 手勢滑動監聽事件 onViewSwipe : fun…

比較兩浮點數的方法

在工作中&#xff0c;我需要比較一系列數據&#xff0c;一方數據精度為兩位小數,而另一方精度為三位小數。我需要將三位小數四舍五入成兩為小數后進行比較。在操作的過程中&#xff0c;問題出現了&#xff0c;明明應該相等的數據卻走了不等的分支。什么原因導致呢&#xff1f;一…

IIS8托管WCF服務

WCF服務程序本身不能運行&#xff0c;需要通過其他的宿主程序進行托管才能調用WCF服務功能&#xff0c;常見的宿主程序有IIS&#xff0c;WAS&#xff0c;Windows服務&#xff0c;當然在學習WCF技術的時候一般使用控制臺應用程序或WinForm程序進行托管。本文將詳細介紹如何使用I…

北京師范大學認知神經科學 計算機,北京師范大學認知神經科學和學習國家重點實驗室.pdf...

北京師范大學認知神經科學和學習國家重點實驗室北京師范大學認知神經科學與學習國家重點實驗室DTI 、靜息fMRI、形態學測量原理及數據分析與應用深度講習班(第二輪通知)近年來&#xff0c;磁共振技術已廣泛地應用到神經科學、認知神經科學、臨床醫學等領域的研究&#xff0c;而…

JAVA面向對象-----instanceof 關鍵字

instanceof 關鍵字 1&#xff1a;快速演示instanceof Person pnew Person();System.out.println( p instanceof Person); 2&#xff1a;instanceof是什么&#xff1f; 1&#xff1a;屬于比較運算符&#xff1a; 2&#xff1a;instanceof關鍵字&#xff1a;該關鍵字用來判斷一…

電子工程師必去的論壇網站

Abstract 搞電子不能閉門造車&#xff0c;要到網上去交流交流&#xff0c;做個網絡吸血鬼也好。本人偶然也發一些資料&#xff0c;還是要感謝活躍在各大論壇上的大蝦們&#xff0c;讓小弟要走了不少彎路。有問題google一下&#xff08;不是本人崇洋媚外&#xff0c;google的功能…

對象的引用

int、datetime、bool、char等類型都屬于值類型&#xff08;valuetype&#xff09;&#xff0c;賦值的時候是傳遞拷貝。 普通的對象則是引用類型&#xff0c;賦值的時候是傳遞引用。傳遞給函數也是引用傳遞的。轉載于:https://www.cnblogs.com/roboot/archive/2012/02/15/235329…

Cesium應用篇:3控件(3)SelectionIndicator InfoBox

假設這樣一個場景&#xff0c;用戶在Cesium球上加載了一個GeoJson文件&#xff08;DataSource&#xff09;&#xff0c;里面是全美國所有州的Geometry信息&#xff08;Entity&#xff09;&#xff0c;疊加到球面后&#xff0c;你自然會有一種沖動&#xff0c;點擊某一個州&…

北理工計算機學院新聞,北理工計算機學子勇奪CVPR 2021 AI安全國際頂級賽事季軍...

2021年4月19日&#xff0c;CVPR 2021挑戰者計劃第六期落下帷幕。由北理工計算機學院教師李元章、張全新及廣州大學李進教授指導的DemiguiseWoo戰隊&#xff0c;在挑戰賽賽道二“ImageNet無限制對抗攻擊”發起沖擊&#xff0c;最終以9303.6的總分取得決賽第三名的好成績&#xf…

字符串入門

暴力 字典樹總結&#xff1a;字典樹的功能就是map字符串得到編碼或者查詢前綴關系套模板的時候注意t,s,&#xff0d;‘a’,[26],sz0的初始化還有一個問題&#xff0c;到底字典樹開多少內存比較合適&#xff0c;反正至少是要開字符總長度*2hdu1251 http://acm.hdu.edu.cn/showpr…

C++ 的基礎概念(3)——多態詳解。

最近兩次面試都問到了多態&#xff0c;我也不得不重視起來了&#xff0c;最近最大的收獲就是&#xff1a;基礎知識很重要&#xff0c;就算你很會寫代碼&#xff0c;但是面試官問你基礎知識答不上來的話&#xff0c;也很難被人賞識和錄用&#xff0c;所以還是要多補補基礎概念&a…

美育在計算機教育中應用,在現代教育技術中綻放數學美育之花

21世紀是信息化的社會&#xff0c;計算機、網絡等現代技術的飛速發展&#xff0c;作為現代教育技術&#xff0c;計算機多媒體技術和網絡技術已經越來越多地走進小學數學課堂&#xff0c;為深化教學改革&#xff0c;培養學生能力&#xff0c;發展學生個性&#xff0c;提供了嶄新…

.NET Forms身份驗證

.NET表單身份驗證 ASP.NET Forms 身份驗證的簡單實現&#xff1a;1&#xff09;在Web.config文件中配置應用程序使用 Forms 身份驗證&#xff1b;2&#xff09;創建登陸頁面&#xff0c;將用戶身份驗證票證添加到Cookie集合。1.配置文件中設置為Forms驗證<authentication mo…

Oracle SQL篇(三)Oracle ROWNUM 與TOP N分析

首先我們來看一下ROWNUM&#xff1a;含義解釋&#xff1a;1、rownum是oracle為從查詢返回的行的編號&#xff0c;返回的第一行分配的是1&#xff0c;第二行是2&#xff0c;依此類推。這是一個偽列&#xff0c;可以用于限制查詢返回的總行數。2、rownum不能以任何基表的名稱作為…

C++ Primer 第10章 pair類型

//10.2.cpp //至少使用三種方法創建pair對象。 //編寫三個版本的程序&#xff0c;分別采用不同的方法來創建pair對象 //方法1&#xff1a;在定義pair對象時提供初始化式來創建pair對象#include<iostream> #include<vector> #include<utility> #include<st…

計算機對口升學可以報考的學校,對口升學可以報考的學校都在這里,趕快來收藏吧...

對口升學指對口高考&#xff0c;在平常又叫對口單招&#xff0c;對口升學&#xff0c;是從中等職業學校畢業生招生&#xff0c;強調中等職業學校畢業生對口升高職的專業技能考試&#xff0c;以專業技能成績為主要錄取依據的招生辦法。報名條件具有正式學籍的中等職業學校畢業生…