1. 程式人生 > >C++while與輸入流一起用的時候

C++while與輸入流一起用的時候

今天寫一段程式碼,發現了一個以前沒有遇到過的問題。
 std::string str1,str2;
	std::cout << "input str1" << std::endl;
	while(std::cin>>str1)
	{
		std::cout << "please input str2" <<std::endl;
		std::cin.clear();
		while(std::cin >> str2)
		{
			std::cout << "str2 was input" << std::endl;
 		}
		
	}

本來打算輸入兩個字串分別判斷,可是我發現當我一次性輸入兩個或以上的時候第二個while下面的程式碼會直接執行。感覺有點奇怪,看來是我沒有透徹的明白輸入和輸出流到底是怎麼執行的於是便研究了一下。更改程式碼如下。
std::vector<std::string> v_str;
	int i = 0;
	while(std::cin>>str1)
	{
		v_str.push_back(str1);
		i++;
	}
	std::cout << i <<std::endl;
	std::cout << v_str[0] << std::endl;
	std::cout << str1 << std::endl;


發現,當輸入三個單詞的時候i確實為3而且,str1為最後一次輸入的字元,單步除錯以後明白了。
此時先執行cin>>str1的語句,而後,迴圈判斷,判斷的條件是看是否輸入成功。只要成功while便成立。所以兩個while迴圈的時候,當從鍵盤輸入兩個或以上字串的時候第二個cin會直接把第二個字串輸入給str2.而此時第二個while是一定成立的。

相關推薦

C++while輸入起用的時候

今天寫一段程式碼,發現了一個以前沒有遇到過的問題。 std::string str1,str2; std::cout << "input str1" << std::endl; while(std::cin>>str1) {

BellGrade的部落格 C++各種輸入

學C++的時候,這幾個輸入函式弄的有點迷糊;這裡做個小結,為了自己複習,也希望對後來者能有所幫助,如果有差錯的地方還請各位多多指教(本文所有程式均通過VC 6.0執行) 1cin 1cin.get() 2cin.getline() 3getline() 4gets() 5getchar() 附:cin

讀HDFS書筆記---5.2 檔案讀操作輸入(5.2.2)---下

2、BlockReader DFSInputStream.read()方法中,呼叫了BlockReader物件的doRead()方法讀取資料塊。 BlockReader是一個介面,抽象了從指定資料節點上讀取資料塊的類。BlockReader有三個主要的子類,如下: (1) BlockRe

讀HDFS書筆記---5.2 檔案讀操作輸入(5.2.2)---上

5.2.2 讀操作--DFSInputStream實現    HDFS目前實現的讀操作有三個層次,分別是網路讀、短路讀(short circuit read)以及零拷貝(zero copy read),它們的讀取效率一次遞增。 網路讀: 網路讀是最基本的一種HDFS讀

讀HDFS書筆記---5.2 檔案讀操作輸入(5.2.1)

5.2.1 開啟檔案          使用者讀取一個HDFS檔案時,首先會呼叫DistributedFileSystem.open()方法開啟這個檔案,並獲取檔案對應的FSDataInputStream輸入流,然後在這個FSDataInputS

大白話系列之C#委託事件講解()

從序言中,大家應該對委託和事件的重要性有點了解了吧,雖然說我們現在還是能模糊,但是從我的大白話系列中,我會把這些概念說的通俗易懂的。首先,我們還是先說說委託吧,從字面上理解,只要是中國人應該都知道這個意思,除非委託2箇中文字不認識,舉個例子,小明委託小張去買車票。    &nbs

MySQL 關於countgroup by起用的效果

本來想要效果是有多少個userId,結果卻顯示的是,去重後每組userId有多少個。 select count(id) from ls_wweb_log_call where userId is not null and companyUserId=:companyUse

c從標準輸入讀取一行的的方法

int main() { char data[1000]; while(gets(data)) { int len = strlen(data) ; printf("%s %d\n",da

C# 檔案正由另程序使用解決方案(共享方式鎖方式)

其主要觸發的原因,檔案正在被讀寫時,讀寫時間過大沒有來得及關閉讀寫流,這時另一程式進行訪問,檔案被前一個程式獨佔 1.將檔案流變為共享: FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, Fil

【原創】從原始碼剖析IO輸入輸出--轉載請註明出處

InputStream與OutPutStream兩個抽象類,是所有的流的基礎,首先來看這兩個流的API InputStream: public abstract int read() throws IOException; 從輸入流中讀取資料的下個位元組

C++(筆記)檔案操作練習(類庫輸入輸出)

1、什麼叫做流?流的提取和插入是指什麼?I/O流在C++中起著怎樣的作用? 解: 流是一種抽象,它負責在資料的生產者和資料的消費者之間建立聯絡,並管理資料的流動,一般意義下的讀操作在流資料抽象中被稱為(從流中)提取,寫操作被稱為(向流中)插入。作

初學C語言:輸入10個整數,將其中最小的數第一個數對換,把最大的數最後個數對換。

#include<stdio.h> void input(int a[10]) { int i; for (i=0;i<10;i++) { scanf("%d",&

read輸入writer輸出的對比

new throw port 單行 length txt cep not 讀取 package io.day4; import java.io.FileNotFoundException;import java.io.FileReader;import java.io.Fi

c++中IO輸入輸出總結<二>

操作 clu 文件 blog trunc pub filename binary team 1 文件的打開和關閉 1.1 定義流對象   ifsteam iflie;//文件輸入流對象   ifsteam iflie;//文件輸出流對象   fsteam iflie;//文

C語言編程之--scanf()函數getchar()函數搭配來理解C程序的輸入緩存(buffer)

使用 ges border urn alt color 數值 amp tps 博主最近在學習C語言編程,在書中的代碼示例中出現了下面的代碼段: #include<stdio.h> int main() { char a[5]; int i; printf("

作業 oozie調度框架的配置使用(

大數據 hadoop oozie 調度框架 一: 常見的調度框架 一: oozie 概述與功能 二: oozie 安裝與配置 一: 常見的作用調度框架 1.1 linux 下面的計劃任務 在工作量比較下的情況下 使用linux 下的crond 使用定制計劃任務 * * *

C陷阱缺陷讀書筆記(

之間 之前 符號 雙引號 陷阱 數組 調用 筆記 如果 第一章 1.2 按位運算符:& 邏輯運算符:&& 1.3 單字符符號:只有一個字符長 多字符符號:含多個字符

c/c++ 模板STL小例子系列< >自建Array數組

stl 編譯不過 header space eve fine ray size new t c/c++ 模板與STL小例子系列<一> 自建Array數組 自建的Array數組,提供如下對外接口 方法 功能描述 Array() 無參數構造方法,構造元

c++ 網絡編程(六)TCP/IP LINUX下 socket編程 多播廣播 實現次發送所有組客戶端都能接收到

send all users 代碼示例 proto 次數 不可 的人 ssa 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 鍥子:有這麽一種情況,網絡電臺可能需要同時向成

種業務系統工作系統資料交換的方式

一種業務系統與工作流系統資料交換的方式 工作流系統作為業務系統的業務流程驅動支撐,提供必要的工作流基本功能,如任務提交,撤回,掛起,終止,獲取待辦事項,路由計算等等。除此之外,還提供流程圖設計,參與人指定等流程定義功能。以上工作不可避免地用到業務系統的資料,比如根據業務資料(借款單)的資料進行路由判斷,計算