第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當格式字符串的末尾有一個換行符時,掃描為什么要求兩次輸入?

當格式字符串的末尾有一個換行符時,掃描為什么要求兩次輸入?

C
守候你守候我 2019-07-01 10:40:18
當格式字符串的末尾有一個換行符時,掃描為什么要求兩次輸入?#include <stdio.h>#include <stdlib.h>#include <string.h>char *method1(void){     static char a[4];     scanf("%s\n", a);     return a;}int main(void){     char *h = method1();     printf("%s\n", h);     return 0;}當我運行上面的代碼時,提示是問我兩次用于輸入(我只使用scanf一次在代碼中)。那是為什么?(我輸入了“Jo”,它要求更多的輸入,所以我又輸入了“Jo”。然后它只印了一次“喬”。)
查看完整描述

3 回答

?
ITMISS

TA貢獻1871條經(jīng)驗 獲得超8個贊

從我的掃描手冊頁

格式字符串中的空白(如空格、制表符或換行符)與輸入中任何數(shù)量的空白(包括無空白)匹配。其他的一切都只匹配自己。

因此.scanf ("%s\n", a)它將掃描一個字符串,后面跟著可選的空格。因為在第一個換行符之后可能會有更多的空格,掃描在第一個換行符之后不會被完成,然后查看下一步是什么。您會注意到,您可以輸入任意數(shù)量的換行符(或制表符或空格),而掃描仍將等待更多。

但是,當您輸入第二個字符串時,空格序列將被分隔并停止掃描。

使用scanf ("%s", a)若要不掃描尾隨空格,請執(zhí)行以下操作。


查看完整回答
反對 回復 2019-07-01
?
holdtom

TA貢獻1805條經(jīng)驗 獲得超10個贊

您必須移除\n的字符串格式scanf..應該是

scanf("%s",a);

編輯:解釋

這個%s意味著掃描器讀取輸入字符,直到得到一個分隔符,該分隔符應該是空格、制表符或新行(\n)的第一個輸入作為分隔符。"%s"并添加"\n"到字符串格式"%s\n"表示掃描將等待2條換行符,第一條換行符與"%s"第二條換行符與\n字符串格式。


查看完整回答
反對 回復 2019-07-01
?
慕虎7371278

TA貢獻1802條經(jīng)驗 獲得超4個贊

"%[^\n]s"由兩個指令組成:%[^\n],它要么匹配(并存儲)一個或多個非‘\n’字符,要么失敗,因為它立即遇到‘\n’,并且s它匹配一個文字的‘并丟棄它,或者失敗并將非’s‘字符推回stdin。第一個指令將連續(xù)嘗試失敗,因為‘\n’不是‘s’,所以‘\n’將直接推回stdin,這是遇到的第一個字符。你自己看看:char a[64]; int n = scanf("%[^\n]s", a); assert(n == 1); n = scanf("%[^\n]s", a); assert(n == 1);

查看完整回答
反對 回復 2019-07-01
  • 3 回答
  • 0 關(guān)注
  • 639 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號