2013-02-28 66 views
1

我需要知道如何讀取字符串並將其拆分爲兩部分,如下例所示。如何讀取由c:中的「:」分隔的兩個字符串

我有這個字符串的文件@amanda:@bruna,但我不能讀成單獨的單詞,並在兩個diferent變量這樣每個店:

char userA[20]; 
char userB[20]; 
scanf("%s:%s", userA, userB); 

你能幫助我嗎?

+0

http://www.cplusplus.com/reference/cstdio/scanf/'%s'讀取任意數量的非空白字符,其中':'絕對不是。 – 2013-02-28 20:52:13

回答

7

使用掃描集,以防止第一%s消耗整條生產線,作爲%s只會停止食用,當它遇到的空白:

if (scanf("%19[^:]:%19s", userA, userB) == 2) 
{ 
    /* 'userA' and 'userB' have been successfully assigned. */ 
} 

其中%19[^:]意味着閱讀最多19個字符,但停止當遇到冒號。指定寬度預先設置緩衝區溢出。始終檢查scanf()的結果,該結果返回分配的數量,以確保後續代碼不處理過時的或未初始化的變量。

+0

謝謝,你幫了我很多 – user1769712 2013-02-28 21:01:58

+0

@ user1769712,沒問題。我瞭解了有關stackoverflow的掃描集也非常有用(這兩個掃描集和SO!)。 – hmjd 2013-02-28 21:02:56

1
char buf[60]; 
char userA[20]; 
char userB[20]; 
char *ptr; 

scanf("%s", buf); 
ptr = strchr(buf, ':'); 
if (ptr == NULL) 
{ 
    // whatever you want to do if there's no ':' 
} 
*ptr = 0; 
strcpy(userA, buf); 
strpcy(userB, ptr + 1); 
+0

謝謝,我會試試這個方式 – user1769712 2013-02-28 21:04:14

0

有沒有必要使用scanf。 (事實上​​,除大學課程外,scanf幾乎沒有目的)。只讀數據:

int main(void) 
{ 
    char line[ 80 ]; 
    char *userA, *userB; 
    fgets(line, sizeof line, stdin); /* Need to check that a full line was read */ 
    userA = line; 
    userB = strchr(line, ':'); /* Need to check that the input contains a colon */ 
    *userB++ = '\0'; 
相關問題