BG Development


Страници: (12) [1] 2 3 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Защо не работи по този начин?
georgib1
Публикувано на: 07-01-2017, 14:19
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 883
Регистриран на: 26.09.16



Здрасти, правя програма да се въвеждат/прочитат оценки на ученик във файл.Нещата във файла са записани така:
Georgi
5
6
3
2
4
Mitko
...
.Когато трябва да чета, избирам само един ученик, на който да видя оценките.И като стигна до друг, спирам да чета.Много се чудих как да го направя и действах по този нелеп начин:
На мен int-a ми е 4 байта, а оценките във файла са от тип int.И направих така, че се проверява размера на реда, който сме взели и ако е 4 го изписва и продължава, а ако не е - спира функцията и цикъла.Защо не работи, ако може някой по-добър метод?
Ето кода:
CODE

void fileToReadFrom()
{
      ifstream fileToReadFrom;
      fileToReadFrom.open("ocenki.txt");
      cout <<"Vuvedete imeto na uchenika, na koito iskate da vidite ocenkite:";
      string name;
      cin >> name;
      string storeLines;
   
    while(getline(fileToReadFrom,storeLines))
         {
   getline(fileToReadFrom,storeLines);
   
      
   if(storeLines==name)
   {
         while(1)
      {
              getline(fileToReadFrom,storeLines);
               int sizeOfLine = sizeof(storeLines);
               if (sizeOfLine==4)
               {
                     cout <<storeLines;
               }
               else
               {
                     break;
                  }
}
                  
                  
      }
      
      }
      
      fileToReadFrom.close();
}

Другото, което ме притеснява е да не се случи така, че името(другото) също да е 4 байта и да прочита него и надолу също.

Това мнение е било редактирано от georgib1 на 07-01-2017, 14:52
PMEmail Poster
Top
bvbfan
Публикувано на: 07-01-2017, 15:27
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2395
Регистриран на: 08.12.13



На C може да се напишат големи глупости, ти трябва да знаеш колко байта четеш - не обратно. Виж read / get


--------------------
QUOTE (Bender @ 23-04-2015, 19:11)
Xamarin: ЛАПАЙ!
Ти: Добре...
PMEmail Poster
Top
georgib1
Публикувано на: 07-01-2017, 16:52
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 883
Регистриран на: 26.09.16



QUOTE (bvbfan @ 07-01-2017, 15:27)
На C може да се напишат големи глупости, ти трябва да знаеш колко байта четеш - не обратно. Виж read / get

Е като запиша реда в променливата и прочета размера на променливата не намирам ли и размера на реда във файла?
PMEmail Poster
Top
dvader
Публикувано на: 07-01-2017, 17:22
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 3676
Регистриран на: 12.07.05



Сложи различни префикси на имената и оценките...
Префикса за оценката може да е името на предмета:
Mathematic=123
Physics=321
Name=Иван
### (това за разделител на записи).

Ref:
https://en.wikipedia.org/wiki/Serialization


--------------------
I find your lack of faith disturbing
PM
Top
georgib1
Публикувано на: 07-01-2017, 18:26
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 883
Регистриран на: 26.09.16



Добре, ще се оправя.А само да питам - възможно ли е, когато записваш във файла, стария запис да си остане, а да не се трие?
PMEmail Poster
Top
relax4o
Публикувано на: 07-01-2017, 18:36
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1256
Регистриран на: 04.04.07



Добави ios::app мод на open().


--------------------
Бисери :D

QUOTE (oveRLuckEd)
Ползваш някоя нова версия на PHP, която е вече ооп ориентирана и заради това ти я изкарва тази грешка.


QUOTE (nbacool2)
Щом няма input полета, значи няма откъде да се направи SQL инжекция Very Happy
PM
Top
georgib1
Публикувано на: 07-01-2017, 18:38
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 883
Регистриран на: 26.09.16



QUOTE (relax4o @ 07-01-2017, 18:36)
Добави ios::app мод на open().

Мерси.
PMEmail Poster
Top
georgib1
Публикувано на: 07-01-2017, 20:58
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 883
Регистриран на: 26.09.16



Тва с байтовете ми се гледа много complicated.Мисля да ползвам функцията find.Ще работи ли така?Ако find-не думата, изписва реда?

Това мнение е било редактирано от georgib1 на 07-01-2017, 21:00
PMEmail Poster
Top
georgib1
Публикувано на: 07-01-2017, 21:08
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 883
Регистриран на: 26.09.16



Записвам реда в string правя проверката с find
CODE

if (found!=std::string::npos)

го изписвам и скачам на другия ред?
PMEmail Poster
Top
georgib1
Публикувано на: 07-01-2017, 21:44
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 883
Регистриран на: 26.09.16



/del

Това мнение е било редактирано от georgib1 на 07-01-2017, 23:24
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (12) [1] 2 3 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0