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


Автор: champion 12.12.2006, 06:40
Код

struct get {
 int _count; 
 int _from; 
 int _to; 
 int _K; 
 int _X; 
 struct coords {
  int _X;
  int _Y; 
 };
 vector<coords> coords;
};
vector<get> get(0);

Код

   input = fopen("input.txt", "r");
 get.resize(get.size()+1);
 n=0;
 while(str!=EOF) {
  str = fgetc(input);
  if(str=='\n') { i++; x=0; n++; }
  if(i==0) {
   get[0]._count+=str;
  }
  if(i==1) {
   n=0;
   if(str!=' ' and n==0) get[0]._from+=str; else n=1;
   if(str!=' ' and n==1) get[0]._to+=str; else n=2;
   if(str!=' ' and n==2) get[0]._K+=str; else n=3;
   if(str!=' ' and n==3) get[0]._X+=str; else n=4;
  }
  if(i>1) {
   if(get[0].coords.size()<get[0]._count) {
    get[0].coords.resize(get[0]._count);
   }
   if(str!=' ' and x==0) get[0].coords[n]._X+=str; else x=1;
   if(str!=' ' and x==1) get[0].coords[n]._Y+=str; else x=1;
  }
 }
 // закрываем файл
 fclose(input);

Почему, когда я считываю посимвольно и присваю get[0]._count значение, то оно совсем какое-то левое? Таких символов в файле нет. Думаю, что что-то с типами, но разобраться сам не могу.  smile

Добавлено @ 06:42 
По сути это значение типа char, но тогда почему компилятор не выводит ошибку? 
Файл вида:
10 // вот тут трабл, считывает непоймешь какие цифры, но когда даю cout << str; то выводит то что надо, а при присваивании пихает не помешь что. Дальше по строкам думаю такие же ошибки
1 2
3445 4554

Автор: archimed7592 12.12.2006, 07:05
если хочешь считывать числа, пользуй fscanf (input, "%d", &num); или cin >> num;...подразумевается int num; smile
если есть большее желание понять, почему с char так получается, то можно почитать http://ru.wikipedia.org/wiki/ASCII...в кратце: символ ("текстовый") и число - разные вещи т. е. ты считываешь '1' (что численно равно 48) а проверяешь на равенство с 1...

Автор: champion 12.12.2006, 12:28
Цитата(archimed7592 @  12.12.2006,  07:05 Найти цитируемый пост)
fscanf (input, "%d", &num); или cin >> num;

Что это значит? Можно подробее про %d, &num smile

Автор: Mal Hack 12.12.2006, 18:31
%d - спецификаторы формата ввода\вывода.
%d - в частности целове число, %c - символ, %s - строка и т.п.
num - переменная куда читать, соответственно для $d - integer.
& обязателен.

Автор: champion 12.12.2006, 20:27
Искал на msdn ничего путевого не нашел( Можно пример? Желательно так, чтобы отпарсиить такой вот файл:
1
22 3 45 4554

?? 

Автор: Partizan 12.12.2006, 20:29
плохо искал значит ) см справку по параметрам fscanf )

Автор: champion 13.12.2006, 20:33
И все таки попрошу пример smile Много всего облазил, но так нигде и не нашел, %d, %s и т.п. в частности синтаксис применения. Вот из MSDN http://msdn2.microsoft.com/en-us/library/cb5kac8b(VS.80).aspx. Но там для себя я ничего нового не узнал) Иностранный не очень хорошо знаю( 

Автор: JackYF 13.12.2006, 20:55
http://www.cplusplus.com/ref/cstdio/fscanf.html

http://www.codenet.ru/progr/cpp/spr/141.php

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