|
|
Другие темы раздела | |
C++ Перегруженная функция в классе вектор #include <iostream> #include <vector> #include"Employe.hh" using namespace std; int main() { vector<Racine> v; //вектор объектов класса Racine https://www.cyberforum.ru/ cpp-beginners/ thread30662.html |
C++ Найти общую сумму 10 введенных массивов Помогите найти общую сумму 10 введеных массивов. |
C++ Шаблон очереди
https://www.cyberforum.ru/ cpp-beginners/ thread30627.html Это шаблон очереди на списках. Посмотрите, пожалуйста, в чём ошибка: #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 // Òèï äàííûõ ìàòðèöû https://www.cyberforum.ru/ cpp-beginners/ thread30626.html |
C++ error LNK2019: ссылка на неразрешенный внешний символ Вот код, неполный, решил откомпилировать - узнать, что исправить #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? https://www.cyberforum.ru/ cpp-beginners/ thread30618.html |
C++ Посмотрите лабораторную работу №2 Используя алгоритмы работы с матрицей, разработанные в лабораторной работе №*1, разработать и протестировать программу обработки двух матриц с элементами разных типов. Программа должна содержать перегруженные функции для работы с целочисленной матрицей и матрицей, элементы которой - строки. #include <iostream> #include <conio.h> using namespace std; //... https://www.cyberforum.ru/ cpp-beginners/ thread30616.html |
Строки в условии C++ Помоги разобраться со строками в условии. cout<<"Is it a worker or a student?"<<endl; cin>>s; if(s=="worker") worker1.data_worker(); else student1.data_student(); Здесь чисто игнорирует, не выдавая никаких ошибок. |
C++ Библиотека gmp.h, бесконечные числа
https://www.cyberforum.ru/ cpp-beginners/ thread30607.html вопрос такой: как выводить числа, которые длинной больше 10 символов?как работает gmp_get_str? |
C++ Как правильно создать динамический массив из функции Вот так ругается компилятор: int** i_matrix; f(i_matrix,N, M); ............................................. void f(int** matrix, int n, int m) { matrix = new int *; if (!matrix) exit(0); https://www.cyberforum.ru/ cpp-beginners/ thread30606.html |
C++ Cоздание дерева выражения Есть таблица лексемм:p: ... struct Lexem { char type; char name; int pos; int prior; }; |
C++ Можно примерчик простенькой програмки, которая читает строку с клавы и записывает ее в переменную.
https://www.cyberforum.ru/ cpp-beginners/ thread30589.html Собственно простенький примерчик. Надо, что бы человек вводил с клавиатуры строку, потом нажимал <Enter> и, то что он ввел попадало в переменную, или сразу в ячейку матрицы. Вот предыдущий код: #include <iostream.h> #include <string.h> int main() { |
21.04.2009, 20:26 | 0 |
Потеря символа при копировании строки - C++ - Ответ 14333721.04.2009, 20:26. Показов 4207. Ответов 18
Метки (Все метки)
Ответ
Ты меня не совсем понял. Я видимо не очень ясно выражаюсь. В общем никак не могу решить с чего начать, а потмоу возможно будет некий сумбур
Сначала касательно твоего примера. Массив char'ов (или указатель на char) ты трактуешь как string в понятии интерфейсов из string.h библиотеки libc: т.е. набор байтов, заканчивающихся нулём. Это всё прекрасно до тех пор, пока такая строка влезает в размер буффера (как изначально пытался сделать автор данной темы) Проблема нашего с тобой спора изначально состоит в том, что хотелось бы работать с файлом таким образом, что читать оттуда строками (в вышеупомянутом понятии string). Но нормально сделать имея на руках лишь стандартные интерфейсы не получится. Немного отклонясь в сторону, скажу, что я несколько погорячился, сказав что все системные функции чтения строки из файл опасны - это не так, ибо в интерфейсе fgets действительно есть параметр, задающий размер буффера (таким образом данные мы не испортим). А вот gets является "опасной". Возвращаюсь к теме. Мы хотим читать построков из файла. Но интерфейсом fgets нормально ты этого не сделаешь, поскольку подавать в него ты должен буффер и размер, но при этом ты не знаешь заранее, какого размера буффер тебе нужно выделять, чтобы. Т.е. у тебя нет никакой гарантии, что fgets тебе прочтёт целую строку из файла, а потому по-хорошему ты должен писать свою процедуру, которая в цикле будет вызывать fgets и проверяя каждый раз, есть ли энтер в строке. Если нет, то тебе буффер надо удлинять и продолжать чтение до тех пор, пока ты не доехал до энтера. Только такой подход даёт тебе 100% гарантию, что ты будешь нормально построково читать файл. Ну и, как вариант, ты накладываешь техническое ограничение на максимальный размер строки в файле и работаешь в предположении соблюдения этого ограничения. Это тоже вариант, но годится он только для программ, написанных для себя. Для промышленных программных продуктов такое, понятное дело, не годится > так я тебе привёл пример с номером строки, случай обычный В случае, тобою описанном, я бы не заморачивался. Открываю файлы на чтение и на запись. В файл на запись пишу номер строки. Далее побайтово переписываю из файла чтения в файл записи до тех пор, пока не встречаю энтер. По энтеру в файл записи дополнительно пишу номер строки о опять всё повторяю. Ну и нужно ещё отсечь факт конца файла, чтобы не налепить лишний номер строки (которая окажется пустой) > стандартные функции обеспечивают переносимость, зачем делать функцию, которая уже есть в стандарте ? Выше в данном посте я тебе отписал пример работы с целиковой строкой. Стандартных функций на Си для этого нет. Для Си++ наверняка есть, но делают они то же, что я и описал - динамически довыделяют буффер до тех пор, пока недостигнем конца строки (энетра) > fgets содержит буфер, он ограничивает количество введённых символов вплоть до нуль-символа, то есть задав 1000 у тебя максимум будет 999+нуль-символ, а минимум - \n Замечание принимается. Выше я написал, что погорячился с этим утверждением. Однако для функции fscanf, которая использовалась в первоначальном посте, моё утверждение остаётся в силе > и она с тем же успехом может читать в память, которая может быть больше миллиона Выше я написал, что заранее ты не знаешь, какого размера у тебя строки, а потому заранее неизвестно, какой буффер выделять. Выделять каждый раз миллион байт, согласись, не кошерно > на низком уровне вообще инструкции и что Под фразой "на низком уровне" я подразумевал внутри библиотечных интерфейсов. С той точки зрения, что ты работаешь на высоком уровне с интерфейсами типа fgets, но их внутренняя реализация - это "низкий" уровень, который в общем случае на разных архитектурах реализуется по разному, а верхний уровень, как ты уже справедливо заметил, даёт нам возможность писать переносимые коды Последний твой комментарий из поста #8 не совсем понял. И сдаётся мне, это всё по той же причине. Наверное мы говорим немного не об одном и том же Вернуться к обсуждению: Потеря символа при копировании строки C++
0
|
21.04.2009, 20:26 | |
Готовые ответы и решения:
18
Ошибка при копировании строки в конец файла Лишние символы в конце строки при копировании Ошибка при чтении символа строки Ошибка при взятии символа под номером Х из строки |
21.04.2009, 20:26 | |
21.04.2009, 20:26 | |
Помогаю со студенческими работами здесь
0
Как задать конец строки и прекратить при вводе определённого символа? Как скопировать подстроку из строки до определенного символа? Или удалить, начиная с этого символа Потеря dataset при копировании Потеря форматирования текста при копировании фрагмента отдельных страниц из браузера в Word 2010 |