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

c語(yǔ)言如何輸入帶\n和空格的字符串

 更新時(shí)間:2025年07月04日 09:43:40   作者:愛(ài)吃芝麻湯圓  
這篇文章主要介紹了c語(yǔ)言如何輸入帶\n和空格的字符串問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

c語(yǔ)言輸入帶空格的字符串

例題引入~~

【題目?jī)?nèi)容】
編寫(xiě)程序,輸入可能帶空格的字符串,計(jì)算并輸入其長(zhǎng)度(即字符個(gè)數(shù),含空格數(shù))。
字符串最大長(zhǎng)度不超過(guò)100。使用字符數(shù)組實(shí)現(xiàn),不使用字符串庫(kù)函數(shù)。
輸入 : 可能帶空格的字符串。
輸出:一個(gè)非負(fù)整數(shù),字符串的長(zhǎng)度。
樣例輸入:
I like C++.
樣例輸出:
11

思路:這道題要使用數(shù)組儲(chǔ)存輸入的內(nèi)容,判斷數(shù)組中“有用的部分”,統(tǒng)計(jì)后輸出即可

#include <stdio.h>
#pragma warning(disable:4996)//vs中這樣輸入避免scanf函數(shù)報(bào)錯(cuò)
int main()
{
	char a[100] = { 0 };
	scanf("%s", a);
	for (int i = 0; i <= 99; i++)
	{
		if (a[i] == 0 && a[i + 1] == 0 && a[i + 2] == 0)//這里取巧
		{     
			printf("%d", i);
			break;
		}
	}
	return 0;
}

如何判斷數(shù)組中有用的部分呢,我們知道,這樣對(duì)數(shù)組初始化后,全部?jī)?nèi)容均為\0,而我們?nèi)€(gè)巧,默認(rèn)用戶(hù)不會(huì)連續(xù)輸入一堆空格。所以如果連續(xù)三個(gè)數(shù)組的元素都是\0,我們覺(jué)得這時(shí)就算有用的部分結(jié)束了。

看起來(lái)沒(méi)毛病,那么我們跑一下試試(逝世)。

壞了,果然逝世了,輸入“I like C++.”,結(jié)果竟然是1。這不就寄了。

哪里出問(wèn)題了呢?

分析一波,看來(lái)a[1]=a[2]=a[3]均為零,肯定是輸入出問(wèn)題了。(你大可分步執(zhí)行一下)

scanf遇到\0就會(huì)讀取前面的內(nèi)容,于是a[0]還正常的讀入,scanf發(fā)現(xiàn)接下來(lái)一個(gè)是\0,就不干了,讀取結(jié)束,循環(huán)結(jié)束,a[1]--a[99]全是\0。裂開(kāi)了!

 如果我們死腦筋,非要用scanf進(jìn)行輸入,可以!有辦法!

scanf("%[^\n]",str);

意思是:一直讀取,直到遇見(jiàn)\n。

nice~~

看下結(jié)果

//I like C++.
//11

其實(shí)還可以用gets,但是c++認(rèn)為gets不安全(我其實(shí)沒(méi)遇到過(guò)),并且題目不讓?zhuān)?!唉~

c語(yǔ)言如何輸入空格加回車(chē)的字符串

例題引入~~

【題目描述】
設(shè)有一篇文章,有3行文字,每行不超過(guò)80個(gè)字符。請(qǐng)統(tǒng)計(jì)出該文的大寫(xiě)字母、小寫(xiě)字母、數(shù)字、空格以及其他字符的個(gè)數(shù)。使用字符數(shù)組實(shí)現(xiàn),不使用字符串庫(kù)函數(shù)。
輸入:三行英文文字,可能有空格及數(shù)字、標(biāo)點(diǎn)等符號(hào)。
輸出:5個(gè)整數(shù),用空格隔開(kāi),分別表示大寫(xiě)字母、小寫(xiě)字母、數(shù)字、空格以及其他字符的個(gè)數(shù)。
【輸入輸出樣例】
輸入:
year 2019
Month 3
DAY 20!
輸出:
4 8 7 3 1

思路:由于scanf+%s沒(méi)法輸入二維數(shù)組(也可能是我菜不會(huì)用)。我們用三個(gè)一維數(shù)組實(shí)現(xiàn)。讀入,判斷,輸出,簡(jiǎn)介明了。

#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
	char w[80] = { 0 };
	char m[80] = { 0 };
	char n[80] = { 0 };
	int a = 0, b = 0, c = 0, d = 0, e = 0;
	scanf("%[^\n]", w);
	scanf("%[^\n]", m);
	scanf("%[^\n]", n);
	for (int i = 0; i < 80; i++)//對(duì)第二行和第三行就不展示在這里了,太浪費(fèi)空間
	{
		if (65 <= w[i] && w[i] <= 90)
			a += 1;
		else if (97 <= w[i] && w[i] <= 122)
			b += 1;
		else if (48 <= w[i] && w[i] <= 57)
			c += 1;
		else if (w[i] == 32)
			d += 1;
		else
			if (m[i] != '\0')
				e += 1;
	}
	printf("%d %d %d %d %d", a, b, c, d, e);
	return 0;
}

對(duì)第二行和第三行的循環(huán)判斷就不展示在這里了,太浪費(fèi)空間

運(yùn)行一波逝世

好家伙,我一個(gè)回車(chē)下去,直接結(jié)束程序了!??!

補(bǔ)充知識(shí):

緩沖區(qū)

緩沖區(qū)是一塊內(nèi)存區(qū), 它用在輸入輸出設(shè)備和CPU之間,用來(lái)緩存數(shù)據(jù) 。目的是為了CPU使其能夠高效率工作。

你從鍵盤(pán)或是其他輸入設(shè)備上輸入的所有內(nèi)容(包括換行\(zhòng)n和空格\0)都會(huì)放在緩沖區(qū)中,隨后由編寫(xiě)的函數(shù)讀取進(jìn)入程序中,緩沖區(qū)一般不可見(jiàn)。

scanf

遇到\0,\n,tab都會(huì)選擇停止從緩沖區(qū)讀取。

當(dāng)運(yùn)行這個(gè)程序時(shí),向緩沖區(qū)輸入真正的內(nèi)容是“year\02019\n”(回車(chē)即\n),第一個(gè)scanf讀取了“\n”前的所有內(nèi)容,然后保存到a中,第二個(gè)scanf也會(huì)選擇讀取了“\n”前的所有內(nèi)容(啥也沒(méi)有),第三個(gè)scanf也會(huì)選擇讀取了“\n”前的所有內(nèi)容(啥也沒(méi)有)。尷尬

下面給出n種辦法供你選擇~

scanf("%[^\n]\n", w);

scanf一直讀取,直到遇到\n停止讀取,然后把\n也讀走。

注意:如果你輸入“s\0s\n”,那么數(shù)組中分別為s,\0,s,\n.第四個(gè)是\n??!

scanf(" %[^\n]", w);

咳咳,我也解釋不清,看下面的注意

注意:如果你輸入“s\0s\n”,那么數(shù)組中分別為s,\0,s,\0.第四個(gè)是\0?。?/span>

scanf("%[^\n]", w);
getchar(); 

當(dāng)你輸入回車(chē)后,緩沖區(qū)還剩一個(gè)\n,getchar會(huì)讀取任意一個(gè)字符(包括tab,\0,\n),清空緩沖區(qū)了。

注意:如果你輸入“s\0s\n”,那么數(shù)組中分別為s,\0,s,\0.第四個(gè)是\0??!

綜合來(lái)講,第二種方法最可靠,甚至你可以在其他離譜的情況下使用。

某無(wú)聊的例子:

#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
	char a[100] = {0};
	scanf(" %s", a);
	printf("%s", a);
	return 0;
}

scanf在%s前加了個(gè)空格,并不影響使用(你可以不輸入空格直接輸入字符串,跟scanf前沒(méi)有空格是一樣的),跟我們通常認(rèn)為的scanf即為嚴(yán)格的輸入不太一致。

所以你如果夠閑可以在每個(gè)scanf最前面都加上個(gè)空格,在緩沖區(qū)沒(méi)有任何內(nèi)容或者只有\(zhòng)n時(shí)是沒(méi)有關(guān)系的。

總結(jié)

用scanf函數(shù)輸入\n和\0,緩沖區(qū)最基本介紹。

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

相關(guān)文章

  • c++利用stl set_difference對(duì)車(chē)輛進(jìn)出區(qū)域進(jìn)行判定

    c++利用stl set_difference對(duì)車(chē)輛進(jìn)出區(qū)域進(jìn)行判定

    這篇文章主要介紹了set_difference,用于求兩個(gè)集合的差集,結(jié)果集合中包含所有屬于第一個(gè)集合但不屬于第二個(gè)集合的元素,需要的朋友可以參考下
    2017-03-03
  • 養(yǎng)成良好的C++編程習(xí)慣之內(nèi)存管理的應(yīng)用詳解

    養(yǎng)成良好的C++編程習(xí)慣之內(nèi)存管理的應(yīng)用詳解

    "養(yǎng)成良好的編程習(xí)慣"其實(shí)是相當(dāng)綜合的一個(gè)命題,可以從多個(gè)角度、維度和層次進(jìn)行論述和評(píng)判,如代碼的風(fēng)格、效率和可讀性;模塊設(shè)計(jì)的靈活性、可擴(kuò)展性和耦合度等等,要試圖把所有方面都闡述清楚必須花很多的精力,而且也不一定能闡述得全面
    2013-05-05
  • C語(yǔ)言 動(dòng)態(tài)內(nèi)存分配的詳解及實(shí)例

    C語(yǔ)言 動(dòng)態(tài)內(nèi)存分配的詳解及實(shí)例

    這篇文章主要介紹了C語(yǔ)言 動(dòng)態(tài)內(nèi)存分配的詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • C++的四種類(lèi)型轉(zhuǎn)換

    C++的四種類(lèi)型轉(zhuǎn)換

    這篇文章主要介紹了C++的四種類(lèi)型轉(zhuǎn)換,有詳細(xì)的示例代碼展示,對(duì)于學(xué)習(xí)C++的同學(xué)有一定的參考價(jià)值,感興趣的同學(xué)可以參考本文
    2023-04-04
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單停車(chē)場(chǎng)管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單停車(chē)場(chǎng)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單停車(chē)場(chǎng)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C語(yǔ)言實(shí)現(xiàn)逆序輸出詳細(xì)

    C語(yǔ)言實(shí)現(xiàn)逆序輸出詳細(xì)

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)逆序輸出。主要實(shí)現(xiàn)C語(yǔ)言實(shí)現(xiàn)對(duì)數(shù)組元素依次賦值然后按照逆序輸出,下面文章小編將詳細(xì)解說(shuō),需要的朋友可以參考一下
    2021-10-10
  • VSCode與Keil聯(lián)合開(kāi)發(fā)STM32的流程

    VSCode與Keil聯(lián)合開(kāi)發(fā)STM32的流程

    這篇文章主要介紹了VSCode與Keil聯(lián)合開(kāi)發(fā)STM32的流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 利用C/C++實(shí)現(xiàn)較完整貪吃蛇游戲

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

    這篇文章主要為大家詳細(xì)介紹了利用C/C++實(shí)現(xiàn)較完整貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C語(yǔ)言基礎(chǔ)之malloc和free函數(shù)詳解

    C語(yǔ)言基礎(chǔ)之malloc和free函數(shù)詳解

    這篇文章主要介紹了C語(yǔ)言基礎(chǔ)之malloc和free函數(shù)詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C++11 算法std::copy_if 與 std::copy_n詳解

    C++11 算法std::copy_if 與 std::copy_n詳解

    C++11新增std::copy_if與std::copy_n,前者條件篩選復(fù)制,后者固定數(shù)量復(fù)制,提升代碼可讀性與性能,適用于數(shù)據(jù)過(guò)濾及批量處理,需注意范圍重疊與目標(biāo)空間不足等陷阱,本文給大家介紹C++11算法std::copy_if 與 std::copy_n詳解,感興趣的朋友一起看看吧
    2025-07-07

最新評(píng)論

大石桥市| 阳原县| 新巴尔虎左旗| 龙里县| 边坝县| 乳山市| 梁河县| 济宁市| 仁寿县| 南漳县| 高阳县| 康保县| 九龙城区| 龙游县| 上林县| 汕头市| 文水县| 孝义市| 泉州市| 玛纳斯县| 康平县| 永兴县| 漳浦县| 定远县| 泌阳县| 大英县| 赣州市| 乌兰县| 巢湖市| 旌德县| 阜南县| 龙州县| 赞皇县| 寻乌县| 南投县| 大城县| 齐齐哈尔市| 洪洞县| 巴林左旗| 罗源县| 嵊泗县|