最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言scanf語句吃掉回車或者空格問題及解決

 更新時間:2022年11月14日 15:23:43   作者:Z小旋  
這篇文章主要介紹了C語言scanf語句吃掉回車或者空格問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

問題描述

我們經(jīng)常在C語言輸入的時候,會發(fā)現(xiàn)scanf講空格或者回車“吃掉”了,導致程序的運行結(jié)果與預(yù)期不一致

以下面一個簡單例子為例

 #include<stdio.h>
 char str[10];
 int main()
 {
    int i;
	for(i=0;i<10;i++)
	{
		scanf("%c",&str[i]);		
	 } 
		for(i=0;i<10;i++)
	{
		 printf("%c",str[i]);
	 }
	 	return 0;
 }

這個程序,獲取10個數(shù),然后打印出來

如果我們正常的輸入10個字符,打印正常

ru'guo

如果我們輸入a,然后回車,再輸入b,再回車… ,結(jié)果只能輸入5個字符,這就是我們經(jīng)常說的Scanf吃掉了你的回車

那么我們首先來了解一下scanf語句:

scanf

scanf()函數(shù)是格式輸入函數(shù),即按用戶指定的格式從標準輸入設(shè)備(鍵盤) 上把數(shù)據(jù)輸入到指定地址的變量中。

讀取方式:

一般格式為:scanf(格式控制,地址列表) 也就是scanf("%?",&?); 可以讀取相對于類型的數(shù)值并且存儲到制定變量,并且可以讀取多個數(shù)值,如數(shù)字,字符,字符串等 ,每次用到scanf‘時,他都會從數(shù)據(jù)緩存區(qū)讀取一個或多個字符,并存入相對應(yīng)的變量中

注意:

  • scanf()在讀取數(shù)字時會跳過空格、制表符和換行符!
  • %c只能輸出或輸入一個字符,%s輸出的是一串字符還有就是char a; string s;輸入的時候scanf("%c",&a);這里的&不能少,而scanf("%s",s);這里不能有&符號

重點:

scanf遇到 回車(enter),空格,TAB 就會結(jié)束一次輸入,空格不會接收

并且, scanf在一次輸入結(jié)束后,不會舍棄最后的回車符(即回車符會殘留在數(shù)據(jù)緩沖區(qū)中)

看下方程序

#include <stdio.h>
int main(){
    char c1,c2;
    scanf("%c %c",&c1,&c2);   //這里有一個空格
    printf("%d %d\n",c1,c2);
 
    scanf("%c%c",&c1,&c2);  //這里沒有空格
    printf("%d %d\n",c1,c2);
    return 0;
}

第一次輸入a和b正常,沒有問題,但是第二次就出現(xiàn)問題了,

scanf單字符輸入時規(guī)定只接收一個字符,所以第一次輸入a b 時 ,第一個scanf("%c %c")之間有一個空格,所以在輸入字符a之后,我們可以輸入空格,enter,,scanf都會自動忽略它(那個空格會讀取停止字符并釋放掉),所以第一次輸入正常,但它卻把回車符也作為字符對待的。

在我們輸入完b之后按回車(Enter),這個回車符是放在緩沖區(qū)的,并且不會舍棄最后的回車符此時的數(shù)據(jù)緩存區(qū)中還殘存著一個回車符,

第二次調(diào)用scanf("%c%c",&c1,&c2);是從緩沖區(qū)中取兩個字符,首先把第一次調(diào)用scanf("%c%c",&c1,&c2);后輸入的回車當作輸入字符賦值給c1 ,之后把a賦值給了c2

這就在輸入邏輯上造成了混亂。

我們這樣改一下

#include <stdio.h>
int main(){
    char c1,c2;
    scanf("%c %c",&c1,&c2);   //這里有一個空格
    printf("%d %d\n",c1,c2);
 
    scanf(" %c %c",&c1,&c2);   //這里也有了空格
    printf("%d %d\n",c1,c2);
    return 0;
}

第二個scanf中添加了兩個空格 然后我們正常輸入

scanf(" %c",&c)前面這個空格(換成\n或者\t也可以),這樣就把緩沖區(qū)中的回車當成第一個字符,讀取后丟掉 

可以很好理解scanf中 空格的作用

空格( )即為讀取一個結(jié)束字符然后丟掉,而普通的字符不受影響

用好之后可以避免很多程序BUG

那么現(xiàn)在各位應(yīng)該知道上方的程序怎么改了

在對應(yīng)位置加好空格就可以了,

這個問題的解決雖然簡單,但是整個問題出現(xiàn)與解決的原因,才是我們需要學習的,不能只拘束與添加一個空格,而應(yīng)該清楚的明白其內(nèi)部的原理,這是我們學習所必須的一個品質(zhì)。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言深入講解內(nèi)存操作問題

    C語言深入講解內(nèi)存操作問題

    程序運行的目的是為了得到特定的結(jié)果,計算機本質(zhì)上是用于計算的,既然是用于計算,就需要參與計算的數(shù)據(jù),那這些數(shù)據(jù)就存儲在內(nèi)存中,計算之前參與運算的數(shù)據(jù)以及運算之后得到的數(shù)據(jù),都存儲在內(nèi)存中,所以對內(nèi)存操作的掌握就尤為重要,下面我們一起來看看
    2022-04-04
  • 淺談C語言數(shù)組元素下標為何從0開始

    淺談C語言數(shù)組元素下標為何從0開始

    很多同學可能在學習數(shù)組時會有這個疑問,下標為什么不從1開始呢?本文主要介紹了淺談C語言數(shù)組元素下標為何從0開始,感興趣的可以了解一下
    2022-01-01
  • C++小游戲BrickHit實例代碼

    C++小游戲BrickHit實例代碼

    本文通過實例代碼給大家介紹了C++小游戲BrickHit的相關(guān)資料,需要的朋友可以參考下
    2018-02-02
  • 如何用C寫一個web服務(wù)器之I/O多路復(fù)用

    如何用C寫一個web服務(wù)器之I/O多路復(fù)用

    本文主要介紹了如何用C寫一個web服務(wù)器之I/O多路復(fù)用,本次選擇了 I/O 模型的優(yōu)化,因為它是服務(wù)器的基礎(chǔ),這個先完成的話,后面的優(yōu)化就可以選擇各個模塊來進行,不必進行全局化的改動了。
    2021-05-05
  • C語言中如何利用循環(huán)嵌套輸出一個菱形

    C語言中如何利用循環(huán)嵌套輸出一個菱形

    這篇文章主要介紹了C語言中如何利用循環(huán)嵌套輸出一個菱形問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++面試題之數(shù)a、b的值互換(不使用中間變量)

    C++面試題之數(shù)a、b的值互換(不使用中間變量)

    這篇文章主要介紹了不使用中間變量,C++實現(xiàn)數(shù)a、b的值互相轉(zhuǎn)換操作,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C語言中動態(tài)內(nèi)存分配malloc、calloc和realloc函數(shù)解析

    C語言中動態(tài)內(nèi)存分配malloc、calloc和realloc函數(shù)解析

    C語言跟內(nèi)存申請相關(guān)的函數(shù)主要有 alloca、calloc、malloc、free、realloc等,下面這篇文章主要給大家介紹了關(guān)于C語言中動態(tài)內(nèi)存分配malloc、calloc和realloc函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 利用C/C++實現(xiàn)較完整貪吃蛇游戲

    利用C/C++實現(xiàn)較完整貪吃蛇游戲

    這篇文章主要為大家詳細介紹了利用C/C++實現(xiàn)較完整貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Qt槽函數(shù)會被執(zhí)行多次的問題原因及解決方法

    Qt槽函數(shù)會被執(zhí)行多次的問題原因及解決方法

    本文主要介紹了Qt槽函數(shù)會被執(zhí)行多次的問題原因及解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • C++中小數(shù)點輸出格式(實例代碼)

    C++中小數(shù)點輸出格式(實例代碼)

    下面小編就為大家?guī)硪黄狢++中小數(shù)點輸出格式(實例代碼)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

西安市| 麦盖提县| 炉霍县| 萍乡市| 牡丹江市| 双柏县| 南陵县| 平罗县| 徐闻县| 河西区| 青岛市| 延边| 郁南县| 贵溪市| 巨野县| 安西县| 同仁县| 吕梁市| 密云县| 河曲县| 静宁县| 焦作市| 梁河县| 西昌市| 遂昌县| 南溪县| 茶陵县| 石棉县| 武陟县| 鹿泉市| 阳东县| 调兵山市| 敦煌市| 合肥市| 师宗县| 东山县| 衡阳县| 渭源县| 通州市| 镇远县| 吴桥县|