2014-12-04 2 views
2

Глядя читать с помощью зсапЕ, но я хочу, чтобы прекратить чтение, если я встречаю «» „\ 0“ (символ новой строки) или EOFрасщеплению Scanf вход в массивы до EOF

Я не совсем уверен, как прекратите это.

Я использовал

char * aBuff; 
char * bBuff; 
char * cBuff; 

//read in the first three lines and put them into char arrays 
//while (scan() != (',' || '\0' || EOF)) //was trying to put it into a while loop, wasn't sure 
scanf("%s", aBuff); 
scanf("%s", bBuff); 
scanf(%s, cBUff); 

Я планирую принимать ввод и ввод их в отдельные массивы. В основном принимайте ввод до или новой строки и помещайте эти данные в массив и продолжайте этот процесс до конца файла.

ответ

1

Вы можете попробовать использовать scansets

зсапЕ() должен остановиться на EOF, но вы хотели бы, возможно, сделать что-то вроде этого:

scanf("%[^,\0]", &s); 
+0

'зсапЕ()' будет видеть только формат вплоть до ' '\ 0''. ''% [^, \ 0] "' будет отображаться как '"% [^, "'. – chux

2

scanf() не практический метод, чтобы читать до столкновения ',', '\0', или EOF. Используйте fgetc().

Самая большая проблема в задании: '\0': scanf(). Пример: с форматом "%[^,\0]", scanf() только читает "%[^,", поскольку он останавливается на встроенном '\0'. Таким образом, с недопустимым спецификатором формата -> неопределенное поведение.

size_t ReadX(char *dest, size_t size) { 
    size_t len = 0; 
    if (size) { 
    while (--size > 0) { 
     int ch = fgetc(stdin); 
     if (ch == 0 || ch == ',' || ch == EOF) break; // maybe add \n too. 
     *dest[len++] = ch; 
    } 
    *dest[len] = '\0'; 
    } 
    return len; // or maybe return the stopping ch 
} 

scanf() может использовать, если код используется громоздкий:

scanf("%[\1\2\3...all_char_codes_min_char_to_max_char_except_,_and\0]%*c", &s); 
Смежные вопросы