Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39

Аргументы, передаваемые в main

13.06.2012, 11:53. Показов 1815. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго утра. Вот такой вопрос возник.
Запуская программу в консоли имеем вид

C++
1
>cpp1.exe -b -s -f=10 test.txt text_output.rez
cpp1.exe -запуск самой программы
-b -s -f=10 - аргументы
test.txt - исходный файл
text_output.rez - результирующий файл

правильно ли я понимаю, что
C++
1
a=argv[argc-1]
присвоит мне в переменную a, имя результирующего файла?
какого типа должна быть переменная a?
как мне вывести или использовать теперь то, что у меня лежит в этой переменной?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.06.2012, 11:53
Ответы с готовыми решениями:

Где хранятся аргументы, передаваемые в функцию
собственно - сабж... интересует вопрос, где же (в какой памяти) всё таки хранятся аргументы, которые передаются в функцию? и где можно...

аргументы main
int main() { } int main(int argc, char **argv) { }

Аргументы ( main)
Чтобы зашифровать некоторый текст, записанный с помощью русских букв и знаков препинания, его можно переписать, заменив каждую букву...

20
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
13.06.2012, 12:05
Переменная должна иметь тип char *. Но лучше копировать параметр функцией strcpy.
1
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 12:08  [ТС]
я тут так подумал.. нафиг вообще копировать в переменную

C++
1
    printf(argv[argc-1]);
можно ведь и так делать?

только на -1 дает последний элемент.
а на -2 ошибку
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
13.06.2012, 12:24
У printf первый аргумент задает форматную строку, тогда уже так
C++
1
printf("%s\n", argv[argc-1]);
0
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 13:04  [ТС]
C++
1
    FILE* fopen(argv[argc-2],w+);
в чем ошибка?

Добавлено через 36 секунд
Цитата Сообщение от kazak Посмотреть сообщение
У printf первый аргумент задает форматную строку, тогда уже так
C++
1
printf("%s\n", argv[argc-1]);
не обязательны идентификаторы. можно и без них)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
13.06.2012, 13:09
Вечный_Студент, Без спецификатора - не корректно.

Добавлено через 42 секунды
Ну и плюс, если уверены, что argc - 2 не будет нулем или меньше тогда так.
C
1
FILE* fopen(argv[argc-2], "w+");
0
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 13:17  [ТС]
error C2061: syntax error : identifier 'argv'

C++
1
FILE* fopen(argv[argc-2],"w+");
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
13.06.2012, 13:21
Где у Вас расположена эта запись?
0
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 13:23  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
printf("File %s not found!\n",argv[argc-2]);
    printf("sozdat? \ny n");
    switch(getch())
        {
            case 'y': 
                FILE* fopen(argv[argc-2],"w+"); 
                break;
            case 'n': 
                break;
            default:
                printf("error");
                return 0;
        }
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
13.06.2012, 13:26
Я имел ввиду - это у Вас все находится в main?
Должно быть что то вроде этого:
C++
1
2
3
int main( int argc, char *argv[]) {
   FILE* fopen(argv[argc-2], "w+");
   ....
0
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 13:32  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
void main(int argc, char *argv[]) 
{
    printf("Got %d arguments:\n", argc);
    for(int i = 0; i < argc; ++i)
        puts(argv[i]);
    FILE *in, *out;
    int fclose (FILE *stream);
 
    if ((in=fopen(argv[argc-2],"r"))==NULL)
    {
        printf("File %s not found!\n",argv[argc-2]);
то что выше работает не ругается.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    printf("sozdat? \ny n");
    switch(getch())
        {
            case 'y': 
                FILE* fopen(argv[argc-2],"w+"); 
                break;
            case 'n': 
                break;
            default:
                printf("error");
                return;
        }
 
    }
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
13.06.2012, 13:59
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
FILE* fopen(argv[argc-2],"w+");
А ничего, что самой переменной для файла нет?
0
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 14:01  [ТС]
Цитата Сообщение от kazak Посмотреть сообщение
А ничего, что самой переменной для файла нет?
есть она.

C++
1
>cpp1.exe -b -s -f=10 test.txt text_output.rez
argv[argc-2] == test.txt
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
13.06.2012, 14:04
Я имее в виду ту переменную, с помощью которой осуществляется работа с файлом, та самая, которая имеет тип FILE*.
0
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 14:33  [ТС]
а нет. показалось.
не могу сообразить.

Добавлено через 28 минут
C++
1
FILE* fopen(argv[argc-2],"w+");
здесь что-то еще должно быть?
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
13.06.2012, 14:35
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
FILE* fopen(argv[argc-2],"w+");
ну например так
C++
1
FILE* in = fopen(argv[argc-2],"w+");
0
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 16:58  [ТС]
C++
1
    FILE* in = fopen(argv[argc-2],"w+");
error C2360: initialization of 'in' is skipped by 'case' label

Добавлено через 1 час 21 минуту
одни ошибки капец

Добавлено через 53 минуты
C++
1
2
3
4
if (argv[i]=='-i')
{
   ....
}
а тут в чем проблема?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
13.06.2012, 17:03
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
error C2360: initialization of 'in' is skipped by 'case' label
FILE* in; - перед switch


C++
1
2
case 'y':
    in = fopen(...);
Добавлено через 1 минуту
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
а тут в чем проблема?
C++
1
2
3
4
5
#include <string.h>
...
if (strcmp(argv[i], "-i") == 0)
{
}
2
 Аватар для Вечный_Студент
2 / 2 / 0
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 23:56  [ТС]
получил вот такой каскад условий

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int err=1;
printf("Got %d arguments:\n", argc);
for (int i = 0; i < argc-2; ++i)
{
   if (strcmp(argv[i], "-i")==0)
      printf("%s preobrazovat zaglavnie v strothnie\n",argv[i]);
   else
      if (strcmp(argv[i], "-d")==0)
         printf("%s Otsortirovat najdennye stroki po ubyvaniu ih dliny\n",argv[i]);
      else
         if (strcmp(argv[i], "-a")==0)
            printf("%s Otsortirovat najdennye stroki po vosrastaniu ih dliny\n",argv[i]);
         else
            if (strcmp(argv[i], "-c")==0)
           printf("%s Iskat stroki, NE soderzasie zadannu\n",argv[i]);
        else
               if (strcmp(argv[i], "-e=")==0)
              printf("%s Vypolnat dejstvia do stroki nomer M ishodnogo teksta\n",argv[i]);
           else
          if (strcmp(argv[i], "-b=")==0)
             printf("%s Vypolnat dejstvia so stroki nomer N ishodnogo teksta\n",argv[i]);
          else
          if (strcmp(argv[i], "-f=")==0)
             printf("%s Zadaet posledovatelnost simvolov, kotoruu nuzno iskat\n",argv[i]);
          else err=0;                    
}
 
if (err==0)
{
  printf("error");
}


почему считывается только первый "-i"
остальные ошибку дают и выполнение
C++
1
2
3
4
if (err==0)
{
  printf("error");
}
в консоли:
F:\cpp1\Debug>cpp1.exe -i -c -d
Got 4 arguments:
-i preobrazovat zaglavnie v strothnie

error
0
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
14.06.2012, 08:24
Во первых argv[0] содержит строку с именем исполняемой программы, так как обработки этой строки нигде нету, то на первой же итерации цепочка if'ов будет пройдена до конца, туда где err приравнивается нулю. Выводы делайте сами.

Во вторых
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
for (int i = 0; i < argc-2; ++i)
Подумайте, сколько итераций должно произойти с таким условием.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2012, 08:24
Помогаю со студенческими работами здесь

Аргументы функции main
Здравствуйте! Очень нужна Ваша помощь... Дано натуральное n. Для n, вводимого с клавиатуры получите действительную квадратную матрицу...

Аргументы функции main
Здравствуйте, программисты! Написать программу для определения, есть ли среди символов этой последовательности символы, образующие слово...

Аргументы функции main
что значит определение оформить как функцию и сортировку оформить как функцию??

аргументы функции main
помогите разобраться создаю файл c.cpp #include &lt;iostream&gt; using namespace std; int main(int argc, char *argv) { ...

Аргументы функции main()
Написать программу для определения, чередуются ли в данной последовательности символы ‘+’ и ‘-‘, и сколько раз каждый из этих символов...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru