Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
1

Чтение из файла, название передано как параметры функции main argc & argv

09.12.2014, 03:34. Показов 5558. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообще дано задание - считать из файла чётные строки, название файла должно быть передано как параметр при запуске из командной строки..
Проблема в том, что я вообще ничего оттуда не могу считать. Крашится при запуске с параметром, как доходит до строки с getc. Есть твёрдое убеждение, что файл попросту не открывается в строке с fopen'ом, так как под "синдромы" сей "диагноз" подходит. Файл с названием "a" лежит в папке Release с exe'шником, собранным в одноимённом режиме. При запуске из cmd c параметром "а" доходит до злосчастного getc, после чего "прекращена работа программы lab.exe..."
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[]){
    FILE *inp;
    char a;
    if (argc > 1){
        inp = fopen(argv[1], "r");
        system("pause");
        cout << argv[1] << endl;
        system("pause");
        a = fgetc(inp);
        system("pause");
        cout << a << endl;
    }
    else{
        cout << "Not arguments" << endl;
    }
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2014, 03:34
Ответы с готовыми решениями:

Что есть argc и **argv в функции int main(int argc, char **argv)?
Здраствуйте, уважаемые кодеры! Что означает argc и **argv в функции int main(int argc, char...

Как пользоваться аргументами argc , argv[] ,функции main
И как запустить программу из консоли ? не совсем понимаю , как передать значения в эти аргументы.

Гарантируется ли что argv[1] == 0 при argc == 1 в функции main
Может быть глупый вопрос, но всё же: Гарантируется ли что argv == 0 при argc == 1 в функции...

что такое int argc, char *argv[] в качестве параметров главной (main) функции?
И зачем

6
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
09.12.2014, 04:10 2
файл на открытие проверяли?

Добавлено через 1 минуту
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
Файл с названием "a" лежит в папке Release с exe'шником, собранным в одноимённом режиме.
Рабочий каталог может быть другой. Например, в Visual Studio это будет каталог с проектом, а не каталоги Debug/Release
0
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
09.12.2014, 07:18  [ТС] 3
Ошибка открытия файла с ошибкой 2, что сие значит?
p.s. в корневую проекта тоже кинул - не проканало.
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.12.2014, 08:47 4
Имя файла с русскими буквами?
0
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
09.12.2014, 12:50  [ТС] 5
Цитата Сообщение от nmcf Посмотреть сообщение
Имя файла с русскими буквами?
Нет. Ни одной папки с названием кириллицей в адресе так же нет.

Добавлено через 7 минут
Так, насколько понял, проблема всё же в адресации. Честно-то говоря, не представляю, что сей файл считает корневой папкой. При вводе полного адреса до файла (создал копию в корневой диска D, ввёл "C:\Users\User\Documents\Visual Studio 2013\Projects\lab\Release\lab.exe" "D:\\a") выполнилось верно. Кто-нибудь знает, какую директорию он открывает при вводе одного названия файла?
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
09.12.2014, 12:55 6
Размести файл по короткому пути (без пробелов), например "d:\myfile.txt" и программу вызывай, указывая полный путь:
1C
1
lab3.exe d:\myfile.txt
Добавлено через 3 минуты
Чтобы файл брался из той же папки, где exe, сначала сделай текущей папку, где он находится.
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.12.2014, 14:40 7
Цитата Сообщение от Werewolf_RU Посмотреть сообщение
Кто-нибудь знает, какую директорию он открывает при вводе одного названия файла?
Считает за текущую - место вызова.
Если перейти через cd в D:\a и вызвать exe с указание пути - то её (D:\a). Если перейти на C:\Users\User\Documents\Visual Studio 2013\Projects\lab\Release\ то её.
Если запускать из студии - файл пытается найти, начиная от ProjectDir (по умолчанию), то есть с папки проекта (где .vcxproj лежит или его аналог).
0
09.12.2014, 14:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2014, 14:40
Помогаю со студенческими работами здесь

Int main(argc, argv) int argc; char **argv;
Сегодня случайно узнал, что типы аргумнтов в функции можно записать за скобкой. Т.е. Hello World...

Аргументы main(int argc, char *argv[])
Эксперты в с++,объясните пожалуйста новичку примерно понял как использовать эти аргументы,но не как...

Проверить аргументы командной строки main, argc, argv
Доброго времени суток! Вот такой вот примерчик: ./super_proga -o1 -o2 arg --option -o1,...

Подскажите пожалуйста с int main(int argc, char*argv[])
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc&gt;1 то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru