Форум программистов, компьютерный форум CyberForum.ru

Потеря символа при копировании строки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегруженная функция в классе вектор http://www.cyberforum.ru/cpp-beginners/thread30662.html
#include <iostream> #include <vector> #include"Employe.hh" using namespace std; int main() { vector<Racine> v; //вектор объектов класса Racine
C++ Найти общую сумму 10 введенных массивов Помогите найти общую сумму 10 введеных массивов. http://www.cyberforum.ru/cpp-beginners/thread30634.html
Шаблон очереди C++
Это шаблон очереди на списках. Посмотрите, пожалуйста, в чём ошибка: #include <iostream> using namespace std; template <typename TInfo> class TQueue { protected:
C++ Проверьте лабораторную №3
Создать шаблоны функций, выполняющей ввод, вывод и упорядочивание матриц. Протестировать шаблоны для матриц с элементами различных типов: int, float и char. Варианты заданий приведены в лабораторной работе № 1. Какие недочеты, что можно улучшить и т.д. #include <iostream> #include <conio.h> using namespace std; #define DATATYPE double // Òèï äàííûõ ìàòðèöû
C++ error LNK2019: ссылка на неразрешенный внешний символ http://www.cyberforum.ru/cpp-beginners/thread30624.html
Вот код, неполный, решил откомпилировать - узнать, что исправить #include "stdafx.h" #include <cstdlib> #include <iostream> using namespace std; #define istr 21 struct train{ int num; char naz; char time;
C++ Приведение типов Чем отличается type(x) от (type) x? подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17411 / 5649 / 355
Регистрация: 30.03.2009
Сообщений: 15,464
Записей в блоге: 26
23.04.2009, 21:32     Потеря символа при копировании строки
Очередной раз убеждаюсь, что мы с тобой друг друга не понимаем. Или понимаем, но плохо. Или плохо помним то, о чём писали раньше

Цитата Сообщение от accept Посмотреть сообщение
в файл на запись ты пишешь номер строки
и
ты пишешь номер строки по ентеру

значит у тебя две ситуации, когда ты пишешь номер строки, а зачем нам две ситуации ?
Зачем две ситуации. Всё это делается в цикле. Энтер - это конец цикла. Т.е. печать второго номера строки происходит уже в начале цикла

Цитата Сообщение от accept Посмотреть сообщение
тебе нужно обработать ситуацию когда файл закончился и ты её откладываешь на потом, а потом то уже сейчас наступило, вместо того, чтобы писать следующую часть программы...
Мысль слабо осилил, но конец файла тебе тоже нужно отрабатывать. В твоём случае это выливается в проверку результата твоей функции на ноль. Разницы никакой

Цитата Сообщение от accept Посмотреть сообщение
потому что через всё это прошёл года полтора назад ))
А я прошёл лет 12 назад

Цитата Сообщение от accept Посмотреть сообщение
я могу построить фукнцию и на основе fscanf, потому что в ней есть всё для ограничения ввода %999[^\n]%*с
Мой косяк. Совсем забыл про такое

Цитата Сообщение от accept Посмотреть сообщение
главное что даёт верхний уровень - не нужно три часа сидеть и разбираться/вспоминать, в своей собственной же программе, в том, как она работает на большинстве своих участков ....
Опять-таки не понимаю. Зачем мне 3 часа разбираться в том, что очень прозрачно. Написать одну процедуру и использовать её всегда - это правильно. Но универсальную процедуру на все случаи жизни не напишешь. Я предпочитаю под каждую задачу писать так, как для этой задачи ниболее просто

Цитата Сообщение от accept Посмотреть сообщение
ты не читал прогу на 1000 строк в одном файле ? напиши и почитай
Я писал проги, объем исходников которых переваливает за 100 мегабайт, а количество файлов переваливает за тысячи И такое пишется годами, а не часами

Цитата Сообщение от accept Посмотреть сообщение
буфер выделяется один раз, да и то, его можно высвободить и выделить заново второй раз, независимо от того, сколько раз в него будут записаны строки.....
Изначально у нас речь шла, как что-либо делать по-простому. Твоя идея была в том, что надо сразу читать строку целиком (в данном случае под строкой подразумевается последовательность символов, заканчивающихся энтером). Далее ты привёл код, который читает строку по кускам. Т.е. строку целиком ты всё-таки прочитать не можешь, а потому тебе приходится её обрабатывать по кускам. В этом месте возникает геморой (помнишь, ты ведь говорил, что нужно по строке бегать взад-вперёд сколько угодно)

Цитата Сообщение от accept Посмотреть сообщение
ага, они будут выделять пока память не кончится, иначе что делать со строкой, которая будет длиннее доступной памяти
Потому то я и говорю, что работать с целиковыми строками неправильно. Либо мы опять говорим о разных вещах

Добавлено через 4 минуты 7 секунд
Ну и собственно мой вариант печати файла с номерами строк

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
int
main (void)
{
  FILE *f;
  int c, line, need_line;
 
  f = fopen ("in.txt", "r");
 
  line = 1;
  need_line = 1;
  while ((c = fgetc (f)) != EOF)
    {
      if (need_line)
        {
          printf ("%d: ", line++);
          need_line = 0;
        }
 
      if (c == '\n')
        need_line = 1;
 
      printf ("%c", c);
    }
 
  fclose (f);
 
  return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru