2015-09-17 43 views
-3

我有困難掃描從用戶輸入的整數(且將其存儲)後進入一個int僅當!後直接印刷:Ç - 如何只掃描符號

char cmd[MAX_LINE/2 + 1]; 
    if (strcmp(cmd, "history") == 0) 
     history(hist, current); 
    else if (strcmp(cmd, "!!") == 0) 
     execMostRecHist(hist, current-1); 
    else if (strcmp(cmd, "!%d") == 0) 
     num = %d; 
    else 
     {//do stuff} 

我明白這是完全錯誤的語法爲strcmp(),但僅作爲我如何收集用戶輸入的示例。

+1

這是什麼意思?num =%d;'? – ameyCU

+0

只需設置爲數字,無論用戶在輸入! – Sean

+1

我不這麼認爲。 – ameyCU

回答

1

strcmp不知道格式說明,它只是比較兩個字符串。 sscanf做你想做的事情:它測試一個字符串是否有一定的格式,並將字符串的部分轉換爲其他類型。

例如:

int n = 0; 

if (sscanf(cmd, " !%d", &num) == 1) { 
    // Do stuff; num has already been assigned 
} 

格式說明%d告訴sscanf尋找一個有效的十進制整數。感嘆號沒有特殊含義,只有在有感嘆號時才匹配。前面的空間意味着該命令可能具有領先的白色空間。不是說在exclam之後和數字之前可能有空格,並且數字可能是負數。

格式說明符對於scanf系列是特殊的,與「%d format of printf」有關,但不同。在其他字符串中通常沒有意義,當然,在代碼中找不到引號時也是如此。

1

你不喜歡自己寫一個檢查器嗎?

#include <ctype.h> 
#include <stdio.h> 

int check(const char *code) { 
    if (code == NULL || code[0] != '!') return 0; 
    while(*(++code) != '\0') { 
     if (!isdigit(*code)) return 0; 
    } 
    return 1; 
} 


/* ... */ 

if (check(cmd)) 
    sscanf(cmd + 1, "%d", &num); 
0

使用sscanf()並檢查其結果。

char cmd[MAX_LINE/2 + 1]; 
num = 0; // Insure `num` has a known value 
if (strcmp(cmd, "history") == 0) 
    history(hist, current); 
else if (strcmp(cmd, "!!") == 0) 
    execMostRecHist(hist, current-1); 
else if (sscanf(cmd, "!%d", &num) == 1) 
    ; 
else 
    {//do stuff}