Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа.exe имя_файла.с имя_результата.с 
V
    Опции темы
n199a
  Дата 8.8.2013, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Пишут так:

Цитата
Программа, с которой мы познакомились в предыдущем
разделе, хотя и выполняет стоящую перед ней задачу, но очень
неудобна в работе, потому что имя каждого нового файла
приходится включать в исходный текст и снова его
компилировать. А хочется, чтобы программа, увидев в
командной строке что-то вроде
Программа.exe имя_файла.с имя_результата.с
сама открыла файл имя_файла.с, читала бы каждую строчку,
предваряла символом табуляции и записывала результат в
файл имя_результата.с.

Такая возможность конечно же есть, но чтобы ей
воспользоваться, придется познакомиться поближе с функцией
main(), которая умеет читать командную строку, то есть
параметры, введенные при вызове программы.
Пусть наша программа сдвига текста вправо называется
rshift.exe и вызывается как
rshift.exe имя_файла.с имя_результата.с .


Программа сдвига, предоставленная, выглядит так:
Код

#include <stdio.h>
#define BSIZE 200
int main(){
char buf[BSIZE];
FILE *in, *out;
in=fopen("l21.c","rb");
out=fopen("z.c","wb");
buf[0]='\t';
while(fgets(buf+1,BSIZE-1,in) != NULL)
fputs(buf,out);
fclose(in);
fclose(out);
return 0;
}

Пользуюсь Geany.

Там причем тут коммандная строка или я чего-то не понимаю?

Это сообщение отредактировал(а) n199a - 8.8.2013, 00:53
PM MAIL   Вверх
EgoBrain
Дата 8.8.2013, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



В приведенном тобой коде функция мейн не получает комадную строку, чтобы это реализовать, необходимо задать параметры
Код

void main(int argc, char* argv[])

http://msdn.microsoft.com/ru-ru/library/17w5ykft.aspx
PM MAIL ICQ Skype   Вверх
n199a
Дата 8.8.2013, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(EgoBrain @  8.8.2013,  01:09 Найти цитируемый пост)
В приведенном тобой коде функция мейн не получает комадную строку, чтобы это реализовать, необходимо задать параметры

Да, моя ошибка. Дальше то код был с 
Код

void main(int argc, char* argv[])

http://forum.vingrad.ru/forum/topic-370923...y2577864/0.html

Но вопрос остается. Причем тут коммандная строка? Я её не использую

UP
Эта тема пересекается с этой http://forum.vingrad.ru/forum/topic-370924...y2577865/0.html
Думаю, лучше тут отвечать.

Это сообщение отредактировал(а) n199a - 8.8.2013, 02:10
PM MAIL   Вверх
bsa
Дата 8.8.2013, 14:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(n199a @  8.8.2013,  03:08 Найти цитируемый пост)
Причем тут коммандная строка?
По заданию ее необходимо использовать.
Цитата(n199a @  8.8.2013,  03:08 Найти цитируемый пост)
Я её не использую
Твои проблемы. Используй.

PM   Вверх
n199a
Дата 8.8.2013, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Цитата(bsa @  8.8.2013,  14:14 Найти цитируемый пост)
Цитата(n199a @  8.8.2013,  03:08 Найти цитируемый пост)
Причем тут коммандная строка?
По заданию ее необходимо использовать.
Цитата(n199a @  8.8.2013,  03:08 Найти цитируемый пост)
Я её не использую
Твои проблемы. Используй.


Как её использовать то? Есть код и все:
Код

#include <stdio.h>
int main(int argc, char *argv[]) {
    int i;
    for(i=0; i<argc; i++)
        printf("%s\n", argv[i]);
    return 0;
}


В учебнике пишут:
rshift.exe имя_файла.с имя_результата.с,
Какой exe? Какие два си-файла? Откуда их то брать...
PM MAIL   Вверх
bsa
Дата 8.8.2013, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



n199a, ты что нам эти вопросы задаешь? Мы что ли придумали задание?
Скорее всего, имена файлов значения не имеют.
PM   Вверх
n199a
Дата 8.8.2013, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.11.2011

Репутация: нет
Всего: нет



Может кому-нибудь понадобится:
Решение в этой теме: http://forum.vingrad.ru/forum/topic-370924...y2577932/0.html
PM MAIL   Вверх
feodorv
Дата 8.8.2013, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(n199a @  8.8.2013,  01:51 Найти цитируемый пост)
Там причем тут коммандная строка или я чего-то не понимаю?

Не понимаешь))) Вот тут в явном виде заданы имена входного файла (который открывается на чтение) и выходного (который открывается на запись).
Цитата(n199a @  8.8.2013,  01:51 Найти цитируемый пост)
in=fopen("l21.c","rb");
out=fopen("z.c","wb");



И стоит задача:

Цитата(n199a @  8.8.2013,  01:51 Найти цитируемый пост)
А хочется, чтобы программа, увидев в
командной строке что-то вроде
Программа.exe имя_файла.с имя_результата.с
сама открыла файл имя_файла.с, читала бы каждую строчку,
предваряла символом табуляции и записывала результат в
файл имя_результата.с.

Так насколько трудно заменить фиксированные имена на значения аргумента argv функции main()???


Цитата(n199a @  8.8.2013,  15:27 Найти цитируемый пост)
Как её использовать то? Есть код и все:

Бог ты мой. Этот совсем код другой. Он лишь иллюстрирует возможность передачи в программу параметров командной строки. И всё. Код, который нужно переделать, вот:
Цитата(n199a @  8.8.2013,  01:51 Найти цитируемый пост)
#include <stdio.h>
#define BSIZE 200
int main(){
char buf[BSIZE];
FILE *in, *out;
in=fopen("l21.c","rb");
out=fopen("z.c","wb");
buf[0]='\t';
while(fgets(buf+1,BSIZE-1,in) != NULL)
fputs(buf,out);
fclose(in);
fclose(out);
return 0;
}



Цитата(n199a @  8.8.2013,  15:27 Найти цитируемый пост)
rshift.exe имя_файла.с имя_результата.с,
Какой exe? Какие два си-файла? Откуда их то брать... 

Это вызов программы rshift.exe (код которой ты должен был изменить) с двумя аргументами - именами файлов. При этом файл имя_файла.с должен существовать (ну создай ты его в текущей папке, скопируй из rshift.c, что ли; "имя_файла.c" - это вот прямо не настоящее имя, а какое-то, которое есть в наличии), а файл имя_результата.с будет автоматически создан при выполнении программы rshift.exe.

Например:
Код

rshift.exe input.с output.с


Если программу rshift.c не переделать под работу с командной строкой, то тогда для обработки файла input.с её придётся переделывать (а для обработки ещё какого-то файла - переделывать ещё раз, что очень не удобно и не является общим решением задачи по обработки произвольного файла с любым именем). И переделать её придётся в таком стиле:
Код

#include <stdio.h>

#define BSIZE 200

int main()
{
  char buf[BSIZE];
  FILE *in, *out;

  in=fopen("input.c","rb");
  out=fopen("output.c","wb");
  buf[0]='\t';

  while( fgets( buf+1, BSIZE-1, in) != NULL)
    fputs( buf, out);

  fclose(in);
  fclose(out);

  return 0;
}



Цитата(n199a @  8.8.2013,  15:40 Найти цитируемый пост)
Решение в этой теме: http://forum.vingrad.ru/forum/topic-370924...y2577932/0.html 

Решение чего??? Печатать аргументы командной строки ты научился, поздравляю. Теперь пора использовать эти знания в этой конкретной программе - rshift.c  smile 


PS Вау! Это победа: http://forum.vingrad.ru/forum/topic-370938.html
Мне до сих пор не понятно, зачем, не разобравшись с поставленной задачей (какой код и как должен работать), устраивать истерику на несколько тем...


Это сообщение отредактировал(а) feodorv - 8.8.2013, 17:17


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.