Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 02:43   #1
luxmunx
 
Регистрация: 13.05.2013
Сообщений: 3
По умолчанию Непонятный код

Здравствуйте!
Я начал изучать работы с файлами в С по книжке Герберта Шилдта. Там есть вот такой код. Я совершенно не понимаю подчеркнутые места. Что значат argc и argv? Откуда у них какие-то значения? И как работает условие "Вы забыли указать имя файла"? оО а где его вводить-то надо это имя? Не понятен код совершенно, помогите, пожалуйста.
Изображения
Тип файла: jpg вооорд.jpg (40.2 Кб, 120 просмотров)
luxmunx вне форума Ответить с цитированием
Старый 13.05.2013, 03:36   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Что значат argc и argv?
Аргументы функции main. Первый аргумент - число аргументов командной строки, второй аргумент - массив из argc строк, каждая содержит соответствующий аргумент. К примеру, если наша программа есть program.exe, то вызов
Код:
program.exe 1 42 C:\Documents\my.file
соответствует аргументам main
Код:
argc = 4;
argv = {"program.exe", "1", "42", "C:\Documents\my.file"};
Цитата:
а где его вводить-то надо это имя?
При вызове программы. Проще всего - из командной оболочки, будь то старомодная cmd или появившийся с Висты PowerShell.
Abstraction вне форума Ответить с цитированием
Старый 13.05.2013, 12:31   #3
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Какой учебник Шилдта и какая глава? ( личный интерес )
RussDragon вне форума Ответить с цитированием
Старый 13.05.2013, 20:12   #4
luxmunx
 
Регистрация: 13.05.2013
Сообщений: 3
Восклицание

Вы очень хорошо постарались расписать, спасибо, но я не могу сообразить для чего нам это все нужно?
Зачем нужен аргумент командной строки? И этот массив?


Цитата:
Сообщение от Abstraction Посмотреть сообщение
Аргументы функции main. Первый аргумент - число аргументов командной строки, второй аргумент - массив из argc строк, каждая содержит соответствующий аргумент. К примеру, если наша программа есть program.exe, то вызов
Код:
program.exe 1 42 C:\Documents\my.file
соответствует аргументам main
Код:
argc = 4;
argv = {"program.exe", "1", "42", "C:\Documents\my.file"};
А что значат числа 1 и 42? Это просто рандомные значения, которые мы присваиваем элементам массива?
И что это за такой файл (C:\Documents\my.file)? Никогда не видел такого формата)


___________________________________ _______

И самое главное, как мне вводить имя файла? Я только запускаю exeшник свой, открывается консоль, программа отрабатывается, выводит на экран, что нет имени и закрывается. Что не так делаю и как правильно? Как мне ввести данные в эти переменные и зачем мне туда их вводить, когда есть обычные переменные ?
luxmunx вне форума Ответить с цитированием
Старый 13.05.2013, 20:13   #5
luxmunx
 
Регистрация: 13.05.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от RussDragon Посмотреть сообщение
Какой учебник Шилдта и какая глава? ( личный интерес )
Полный справочник по Си++, Герберт Шилдт, 4 издание. Глава 9, файлы.
luxmunx вне форума Ответить с цитированием
Старый 14.05.2013, 00:29   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
А что значат числа 1 и 42? Это просто рандомные значения, которые мы присваиваем элементам массива?
И что это за такой файл (C:\Documents\my.file)? Никогда не видел такого формата)
Это просто некоторые аргументы, взятые от фонаря.
И не путайте формат файла (который относится к его "внутреннему устройству", скажем так) и расширение файла, которое по большому счёту является частью имени. То есть, ничто не мешает взять файл формата AVI и сделать ему расширение .txt. Сам файл от этого не изменится ни на йоту, и любая программа, способная открыть файл формата AVI, по-прежнему сможет его открыть.

Цитата:
И самое главное, как мне вводить имя файла? Я только запускаю exeшник свой, открывается консоль, программа отрабатывается, выводит на экран, что нет имени и закрывается. Что не так делаю и как правильно? Как мне ввести данные в эти переменные и зачем мне туда их вводить, когда есть обычные переменные ?
Стандартный способ вызова старой командной оболочки в Windows:
[Win]+[R], ввести cmd, [Enter]. Откроется окно консоли.
Если программа находится не на системном диске (скажем, системный диск C:, а программа лежит в D:\Documents\Programs\ConsoleIn\), ввести букву диска, двоеточие, [Enter] (D.
Ввести cd path, где path - путь к директории, в которой лежит программа (cd D:\Documents\Programs\ConsoleIn). В Windows Vista и 7 "истинный" путь к просматриваемой папке можно получить, кликнув в свободном месте в строке пути проводника, в XP и раньше он отображается там всё время.
Обратите внимание, что текущая директория сменилась на указанную командой cd.
Ввести имя исполняемого файла (program.exe), затем любые аргументы. Программа будет вызвана с этими аргументами.

Цитата:
зачем мне туда их вводить, когда есть обычные переменные ?
На этот вопрос затруднительно ответить в двух словах. Скажем так, у программы есть три способа получить информацию из "внешнего мира": прочитать аргументы командной строки, прочитать что-либо из стандартного потока ввода, попытаться получить информацию "самостоятельно" (обратиться к файлу с определённым именем, связаться с сетевым ресурсом с определённым IP и т.д.).
Когда программа запускается так, как приведено выше, то стандартный поток ввода при запуске программы связывается с вводом консоли, поэтому разница между ним и аргументами не вполне ощутима. Однако в тех случаях, когда наша программа вызывается другой программой, разница заметна: передать аргументы командной строки много легче, чем пытаться устроить ввод из стандартного потока. Далее, стандартные потоки (ввода, вывода, сообщений об ошибках) могут быть перенаправлены - то есть, при обращении к стандартному потоку ввода наша программа будет получать данные из какого-то совсем другого источника.
Это достаточно старое разделение, поэтому многие вещи на него завязаны - скажем, когда Вы "открываете" файл с расширением txt (положим, D:\Documents\file.txt) двойным кликом, и если Windows знает, что файлы с расширением txt требуется открывать программой C:\Windows\System32\notepad.exe, то исполняется следующая команда:
C:\Windows\System32\notepad.exe D:\Documents\file.txt
То есть, запускается программа notepad, а то, какой файл надо открывать, ей передаётся в качестве аргумента командной строки. То же будет верно и если Вы напишете свою программу и скажете Windows, что хотите открывать файлы такого-то расширения с её помощью.
Общее правило выглядит следующим образом: программа принимает управляющие данные (путь к обрабатываемому файлу, режим работы, дополнительные настройки) как аргументы командной строки, а обрабатываемые данные - через стандартный поток ввода. Это не железный закон, разумеется, но если у Вас нет идей лучше, стоит его придерживаться.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный код qwertyk Общие вопросы C/C++ 18 08.02.2013 16:15
Непонятный код artem611 Помощь студентам 2 11.04.2012 00:43
C# непонятный код raok Помощь студентам 4 21.05.2011 14:15
Непонятный код. Вадим Буренков Общие вопросы Delphi 9 18.08.2010 17:15
непонятный код Kostua Помощь студентам 5 27.04.2008 18:17