2013-02-28 3 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' читает любое число непробельных символов, которые': 'определенно не является. –

ответ

7

Используйте набор сканируемых символов, чтобы предотвратить первый %s потребляя всю линию, как %s только прекратить употребление, когда он сталкивается с пробелами:

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

где %19[^:] означает чтения в большинстве 19 символов, но остановить когда встречается двоеточие. Указание перерасхода буфера превалирует. Всегда проверяйте результат scanf(), который возвращает количество выполненных заданий, чтобы гарантировать, что последующий код не обрабатывает устаревшие или неинициализированные переменные.

+0

Спасибо, ты мне очень помог – user1769712

+0

@ user1769712, без проблем. Я также узнал о scansets в stackoverflow, очень полезный (оба сканирования и SO!). – hmjd

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

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'; 
Смежные вопросы