crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
> Помогите найти ошибку (запись в файл)
++Norton++
  опции профиля:
сообщение 11.10.2008, 23:06
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Спасибо сказали: 0 раз(а)




Репутация:   1  


В том то и дело, что просто переходит на другую линию (так, в принципе, и надо).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.10.2008, 23:21
Сообщение #12


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


ну я кажется просто торможу, вот такой код попробуй:
#include <QtCore>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile        file("./outfile.txt");
    QTextStream    out(&file);
    QTextStream    in(stdin);
    QString        cmdline;

    /*qDebug() << */file.open(QIODevice::WriteOnly/* | QIODevice::Text*/);

    while (!in.atEnd())
    {
        cmdline=in.readLine();
        out << cmdline;
    }
    file.close();

    return 0;
}


я вот непонял насчет повторного вызова функции catFile() это обязательно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 12.10.2008, 0:41
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Спасибо сказали: 0 раз(а)




Репутация:   1  


Да, последующие вызовы тоже должны быть возможны.
Проверил код, первый вызов функции работает нормально, а вот последующие... такая же ситуация как и с моим кодом :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.10.2008, 0:46
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


тогда перед выходом из функции вызывай либо void QTextStream::reset () либо bool QTextStream::seek ( qint64 pos ) с позицией нуль. Ни тот ни другой, я не использовал поэтому не знаю что тебе подойдет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 12.10.2008, 11:22
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Спасибо сказали: 0 раз(а)




Репутация:   1  


К сожалению, не то ни другое не подходит. Перед while пробовал ставить и in.seek(0) и in.reset(); но результат такой же... :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 12.10.2008, 12:20
Сообщение #16


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


cat>file как бы тоже не перезапускается.
Так что приведённые функции работают совершенно аналогично.
Насколько я понимаю, шел по Ctrl+D просто закрывает пайп ввода, так что бессмысленно пытаться что-то ещё с ним зделать после этого.

Объясни ещё раз, чего именно ты пытаешся добиться?

Сообщение отредактировал Tonal - 12.10.2008, 12:21
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.10.2008, 15:49
Сообщение #17


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Tonal, посмотри пожалуйста тему QTextStream, operator<< работает асинхронно?, для меня поведение ввода/вывода неимеет объяснение
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 12.10.2008, 22:22
Сообщение #18


Студент
*

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Спасибо сказали: 0 раз(а)




Репутация:   1  


Tonal
Мне нужно написать функцию, которая бы считывала строку за строкой, введенные пользователем в stdin и потом, все то, что он вводил записалось в файл. При нажатии Enter, выполнение функции не должно прекращаться (как в любом текстовом редакторе. Это просто переход на следующую строку).
Т.е:
1. Вызывается функция и пользователь вводит в консоли (именно так, строку за строкой):
12345
67890
123123

2. Когда все написано, посылает сигнал о прекращении выполнения функции ( в моем случае это был ctrl+D, но полного успеха как видно нет).
3. Все то, что он ввел, записывается в файл (точно так же строка за строкой). Т.е. содержимое файла примет вид:
12345
67890
123123

Вот собственно и вся задача.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.10.2008, 22:28
Сообщение #19


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


++Norton++, дак тебе зачем вызывать функцию несколько раз?
При первом вызове, она съест все строчки и вывидит их в файл, см. мой пост №12, именно это и происходит, в виндовозе покрайней мере. Хоть там и нет <Ctrl>+<D>
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
++Norton++
  опции профиля:
сообщение 12.10.2008, 23:38
Сообщение #20


Студент
*

Группа: Участник
Сообщений: 98
Регистрация: 5.10.2008
Пользователь №: 380

Спасибо сказали: 0 раз(а)




Репутация:   1  


Просто после выполнения этой функции не происходит выход из программы (передается управление опять функции main()). И если например пользователю нужно создать сразу же еще один текстовый файл (после создания первого), тогда нужно осуществить еще один вызов функции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.4.2024, 5:14