日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cin

發布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cin 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 通過cin讀取的數據與變量的類型不匹配
    • 2 使用cin輸入時自動跳過空白字符
    • 3 使用cin連續輸入多個字符串,個數不確定
    • 4 使用getline從標準輸入讀入一行
    • 5 使用getch()函數進行無回顯輸入

1 通過cin讀取的數據與變量的類型不匹配

#include <iostream> #include <Windows.h> #include <string>using namespace std;int main(void) {int a;int b;int c;//std::cin >> a >> b >> c;std::cout << "請輸入a: ";std::cin >> a;if (cin.fail()) { //檢查輸入時是否發生了錯誤cout << "輸入錯誤,應該輸入一個整數" << endl;//清除錯誤標記,使得后續輸入可以正常進行//但是已經輸入的數據還在輸入緩沖區cin.clear(); cin.sync(); //清空輸入緩沖區}std::cout << "請輸入b: ";std::cin >> b;if (cin.fail()) {cout << "輸入錯誤,應該輸入一個整數" << endl;cin.clear(); //清除錯誤標記,使得后續輸入可以正常進行cin.sync(); //清空輸入緩沖區}std::cout << "請輸入c: ";std::cin >> c;if (cin.fail()) {cout << "輸入錯誤,應該輸入一個整數" << endl;cin.clear(); //清除錯誤標記,使得后續輸入可以正常進行cin.sync(); //清空輸入緩沖區}std::cout << "a=" << a << std::endl;std::cout << "b=" << b << std::endl;std::cout << "c=" << c << std::endl;system("pause");return 0; }

cin.sync()函數在g++環境下有效,而在VS中無效,VS中可以考慮使用cin.ignore()函數。也可以手動進行清楚緩沖區中的內容,比如自定義一個函數:

void clearBuff() {char tmp;while ((tmp = getchar()) != '\n'); }

cin.ignore(count, c);
從輸入流中提取并丟棄字符,直到遇到下列三種情況:

  • 提取的字符達到了參數count指定的數量。
  • 在輸入序列中遇到文件結束(EOF)。
  • 輸入序列中的下一個字符為參數c指定的字符(這個字符會被提取并丟棄)。
  • count常常取:

    • std::numeric_limits<std::streamsize>::max() , 相當于IO流的最大字符個數

    常見用法:(把標準輸入緩沖區cin的所有數據都清空)

    • cin.ignore(std::numeric_limits<streamsize>::max(), '\n');

    2 使用cin輸入時自動跳過空白字符

    string university; //大學string profession; //專業cout << "你是哪個學習畢業的?學什么專業? ";// 輸入: 清華 考古 hello// 自動跳過空白字符cin >> university >> profession; cout << university << "的" << profession << "專業不錯哦!" << endl;

    3 使用cin連續輸入多個字符串,個數不確定

    #include <iostream> #include <Windows.h> #include <string>using namespace std;int main(void) {string food; //專業int i = 0;cout << "你喜歡什么美食? ";while (cin >> food) { //當用戶輸入 Ctrl + z 并回車 cin >> food返回0, 0就是假i = i + 1;cout << "你喜歡的第" << i << "美食是:" << food << endl ;cout << "你還喜歡吃什么美食? ";}cout << "你最喜歡的美食有" << i << "種" << endl;system("pause");return 0; }

    4 使用getline從標準輸入讀入一行

    #include <iostream> #include <Windows.h> #include <string>using namespace std;int main(void) {string addr; //專業cout << "你想到哪里去旅行:";//從標準輸入設備讀取一行,但是不包括最后輸入的回車符getline(cin, addr);//empty方法if (addr.empty() == true) {cout << "您輸入了一個空行" << endl;return 1;}//size()和length()完全等效//長度是指字符串占用的字節數,如果含有漢字,那么總的字節數和漢字個數不同 cout << "地址的長度是:" << addr.size() << endl;cout << "地址的長度是:" << addr.length() << endl;system("pause");return 0; }

    注意: 如果在讀入一行前已經讀取一個指定類型的數據(比如int類型、double類型等),則必須把緩沖區中回車換行符給清空掉,否則就會無法正常讀取新的一行的內容(讀取的就是仍在緩沖區中的回車換行符)。

    C++中可以使用如下代碼:

    string str1, str2;cin >> str1;cin.ignore();getline(cin, str2);cout << str1 << endl;cout << str2 << endl;

    cin.ignore()函數的用法可以參考如下文章,寫的非常清晰易懂:一眼就能看懂的cin.ignore()函數詳解。

    C語言中可以使用如下代碼:

    #include <stdio.h> #include <Windows.h>int main(void) {char name[16];char addr[64];printf("姑娘芳名?\n");scanf("%s", name);//此時輸入緩沖區中還有一個回車符//清空輸入緩沖區fflush(stdin); printf("姑娘家住何地?\n");gets(addr); //讀一行,包括一行中的空格printf("家住%s 的%s, 我中意你!\n", addr, name);system("pause");return 0; }

    5 使用getch()函數進行無回顯輸入

    #include<conio.h> void input_pwd(char pwd[], int max_len) {char c;int i = 0;while (1) {c = getch();// getch不從輸入緩沖區中讀取//在getch中,把回車按鍵輸入,識別為回車符'\r'//在getchar中,把回車按鍵輸入,識別為換行符'\n'if (c == '\r' || i >= max_len) { pwd[i] = 0;break;}pwd[i++] = c;printf("*", c);}printf("\n"); }

    總結

    以上是生活随笔為你收集整理的cin的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。