Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > fscanf


Автор: JAnty 29.3.2005, 17:02
Не могу сделать следующее:
есть файл "text.txt", содержимое:
Hello World !
Я читаю строки fscanf("%s",&str);
при первом чтении str="Hello"
при второи чтении str="World"
а пробел это разделитель.
Как мне его отследить его(пробел || \n)?

Автор: En_t_end 29.3.2005, 17:08
я бы читал так(ifstream in;in.open("test.txt")) in >> str, все это в цикл и усе smile В каждой итерации цикла не забудь выводить, куда там тебе нужно str.
PS наф. юзать sscanf ?
Добавлено @ 17:13
ifstream in;
in.open("test.txt");
char str[9999];
{
int i=0;
while(i != 2)}
in >> str;
cout << str;
i++;}
}


Автор: JAnty 29.3.2005, 17:42
Мне надо считать символ после слова Hello и провереть его, Enter или это пробел.
smile

Автор: Fixin 29.3.2005, 18:01
scanf("%s", str);
scanf("%c", chr);
if (chr == ' ') || ( == '\n') .....

Не уверен на счет %c - чар символ.

Автор: JAnty 29.3.2005, 18:13
Ну так не работает почемуто. smile

Автор: Void 29.3.2005, 18:34
scanf("%[^ \n]%c, str, &chr);

%[^ \n] означает - читай все, кроме пробела и возврата каретки. Естественно, можно написать побольше разделителей. Это не совсем стандартная фича, но в большинстве современных CRT присутствует.

Автор: JAnty 30.3.2005, 10:13
Заработало. Fixin Я просто нето писал, вместо
char str;
писал
char* str;
"%c" это один символ, символьней небывает.(То что надо) smile

Цитата(Void @ 29.3.2005, 18:34)
scanf("%[^ \n]%c, str, &chr);

а это чото я не очень понял. smile

Автор: Void 30.3.2005, 18:17
Цитата(JAnty @ 30.3.2005, 10:13)
Цитата (Void @ 29.3.2005, 18:34)
scanf("%[^ \n]%c, str, &chr);

а это чото я не очень понял. smile


Да ничего сложного, хотя это излишне, если вариант Fixin работает. Просто я попробовал предложить еще одно решение.
Помимо стандартных спецификаторов формата (%s, %c и т. д.) есть расширения, позволяющие читать строки с произвольными разделителями. В квадартных скобках - набор допустимых символов, ^ означает дополнение к этому набору, т.е. "все кроме". В данном примере в первое поле могут быть прочитаны любые символы, кроме пробела и \n, т.е. scanf будет читать до первого из этих разделителей. Следующий символ во входном потоке и будет искомый. Немного по этому поводу можно почитать http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_scanf_type_field_characters.asp.

Автор: Bio 20.5.2008, 17:38
Помогите!

Как прочитать поток символов, не разделённых пробелом, из файла эффективным обраозом?

Например: 00101110000110

Имеется в виду:

fi = fopen("input.txt","r");
while (!feof (fi))     
{ 
      // обрабатываю каждый 0 и 1 как отдельный символ
}

Автор: JackYF 20.5.2008, 18:06
fgetc

Автор: Bio 20.5.2008, 18:12
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)