簡體   English   中英

scanf C程式

[英]scanf C program

因此,我一直在查看C程序代碼,並且有一個代碼片段讓我感到非常困惑。 我是C語言的新手,而且我還沒有在C中看到過像這樣的任何編碼樣式。

i = 0;
while (1 == scanf("/%[^/ \t\n]", a[i++]))
  printf(">%s<\n", a[i-1]);

您正在查看的是簡單的格式字符串

在這種情況下:

while (1 == scanf("/%[^/ \\t\\n]", a[i++])) { ... }

  1. scanf語句應恰好返回一個值。 當循環獲得除“ 1”以外的任何值(例如,文件末尾的“ 0”)時,循環終止。

  2. 該值將被寫入a[]

  3. 索引( a[i++] )每次通過循環都會增加

  4. 並且,根據《 Beej指南》:

https://beej.us/guide/bgc/output/html/multipage/scanf.html

%[

這是關於最奇怪的格式說明符。 它允許您指定一組要存儲的字符(可能以字符數組形式存儲)。 匹配集合中不存在的字符時,轉換將停止。

例如,%[0-9]表示“將所有數字從零到9進行匹配”。 %[AD-G34]表示“匹配A,D到G,3或4”。

現在,要進行卷積,可以通過將插入號(^)直接放在%[之后,再跟在集合后面,例如:%[^ AC],來告訴scanf()匹配集合中未存在的字符。表示“匹配不是A到C的所有字符。”

要匹配方括號,請將其設為集合中的第一個字符,如下所示:%[] AC]或%[^] AC]。 (我添加了“ AC”只是為了清楚地表明“]”是集合中的第一位。)

要匹配連字符,請將其設置為集合中的最后一個字符:%[AC-]。

因此,如果我們要匹配除“%”,“ ^”,“]”,“ B”,“ C”,“ D”,“ E”和“-”以外的所有字母,則可以使用以下格式字符串:% [^]%^ BE-]。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM