欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言scanf語(yǔ)句吃掉回車或者空格問(wèn)題及解決

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

問(wèn)題描述

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

以下面一個(gè)簡(jiǎn)單例子為例

 #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;
 }

這個(gè)程序,獲取10個(gè)數(shù),然后打印出來(lái)

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

ru'guo

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

那么我們首先來(lái)了解一下scanf語(yǔ)句:

scanf

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

讀取方式:

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

注意:

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

重點(diǎn):

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

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

看下方程序

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

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

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

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

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

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

我們這樣改一下

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

  • 由static_cast和dynamic_cast到C++對(duì)象占用內(nèi)存的全面分析

    由static_cast和dynamic_cast到C++對(duì)象占用內(nèi)存的全面分析

    下面小編就為大家?guī)?lái)一篇由static_cast和dynamic_cast到C++對(duì)象占用內(nèi)存的全面分析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 基于easyx的C++實(shí)現(xiàn)貪吃蛇

    基于easyx的C++實(shí)現(xiàn)貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了基于easyx的C++實(shí)現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Windows上CLion的配置步驟詳解

    Windows上CLion的配置步驟詳解

    這篇文章主要介紹了Windows上CLion的配置,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • C語(yǔ)言中的浮點(diǎn)數(shù)據(jù)類型

    C語(yǔ)言中的浮點(diǎn)數(shù)據(jù)類型

    這篇文章主要介紹了C語(yǔ)言中的浮點(diǎn)數(shù)據(jù)類型,文章會(huì)從處理帶小數(shù)的數(shù)值的相關(guān)資料開(kāi)始介紹,感興趣的小伙伴的可以參考下面 文章的具體內(nèi)容
    2021-10-10
  • Matlab實(shí)現(xiàn)同步子圖視角的方法詳解

    Matlab實(shí)現(xiàn)同步子圖視角的方法詳解

    這篇文章主要和大家分享三個(gè)可以Matlab中更簡(jiǎn)便實(shí)現(xiàn)同步子圖視角的技巧,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-06-06
  • 數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹(shù)子結(jié)構(gòu)的詳解

    數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹(shù)子結(jié)構(gòu)的詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹(shù)子結(jié)構(gòu)的詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語(yǔ)言數(shù)組超詳細(xì)講解中篇三子棋

    C語(yǔ)言數(shù)組超詳細(xì)講解中篇三子棋

    數(shù)組是一組有序的數(shù)據(jù)的集合,本篇將帶你結(jié)合數(shù)組來(lái)實(shí)現(xiàn)三子棋小游戲,上手實(shí)練更快的能夠掌握數(shù)組使用,感興趣的朋友來(lái)看看吧
    2022-04-04
  • C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    這篇文章主要介紹了C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • 常用排序算法的C語(yǔ)言版實(shí)現(xiàn)示例整理

    常用排序算法的C語(yǔ)言版實(shí)現(xiàn)示例整理

    這篇文章主要介紹了常用排序算法的C語(yǔ)言版實(shí)現(xiàn)示例整理,包括快速排序及冒泡排序等,基本上都給出了時(shí)間復(fù)雜度,需要的朋友可以參考下
    2016-03-03
  • C語(yǔ)言二分查找圖文詳解

    C語(yǔ)言二分查找圖文詳解

    折半查找法也叫做二分查找,顧名思義就是把數(shù)據(jù)分成兩半,再判斷所查找的key在哪一半中,再重復(fù)上述步驟知道找到目標(biāo)key,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言二分查找的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評(píng)論