Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Вечный_Студент
2 / 2 / 1
Регистрация: 16.05.2012
Сообщений: 39
#1

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

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


http://www.cyberforum.ru/cpp-beginners/thread553715.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2012, 11:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Аргументы, передаваемые в main (C++):

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

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

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

Аргументы функции main()
Написать программу для определения, чередуются ли в данной последовательности...

аргументы функции main
помогите разобраться создаю файл c.cpp #include <iostream> using namespace...

20
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
13.06.2012, 12:05 #2
Переменная должна иметь тип char *. Но лучше копировать параметр функцией strcpy.
1
Вечный_Студент
2 / 2 / 1
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 12:08  [ТС] #3
я тут так подумал.. нафиг вообще копировать в переменную

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

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

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

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

C++
1
FILE* fopen(argv[argc-2],"w+");
0
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
13.06.2012, 13:21 #8
Где у Вас расположена эта запись?
0
Вечный_Студент
2 / 2 / 1
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 13:23  [ТС] #9
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
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
13.06.2012, 13:26 #10
Я имел ввиду - это у Вас все находится в main?
Должно быть что то вроде этого:
C++
1
2
3
int main( int argc, char *argv[]) {
   FILE* fopen(argv[argc-2], "w+");
   ....
0
Вечный_Студент
2 / 2 / 1
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 13:32  [ТС] #11
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
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
13.06.2012, 13:59 #12
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
FILE* fopen(argv[argc-2],"w+");
А ничего, что самой переменной для файла нет?
0
Вечный_Студент
2 / 2 / 1
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 14:01  [ТС] #13
Цитата Сообщение от kazak Посмотреть сообщение
А ничего, что самой переменной для файла нет?
есть она.

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

Добавлено через 28 минут
C++
1
FILE* fopen(argv[argc-2],"w+");
здесь что-то еще должно быть?
0
kazak
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
13.06.2012, 14:35 #16
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
FILE* fopen(argv[argc-2],"w+");
ну например так
C++
1
FILE* in = fopen(argv[argc-2],"w+");
0
Вечный_Студент
2 / 2 / 1
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 16:58  [ТС] #17
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
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.06.2012, 17:03 #18
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
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 / 1
Регистрация: 16.05.2012
Сообщений: 39
13.06.2012, 23:56  [ТС] #19
получил вот такой каскад условий

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
3057 / 2378 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
14.06.2012, 08:24 #20
Во первых argv[0] содержит строку с именем исполняемой программы, так как обработки этой строки нигде нету, то на первой же итерации цепочка if'ов будет пройдена до конца, туда где err приравнивается нулю. Выводы делайте сами.

Во вторых
Цитата Сообщение от Вечный_Студент Посмотреть сообщение
for (int i = 0; i < argc-2; ++i)
Подумайте, сколько итераций должно произойти с таким условием.
1
14.06.2012, 08:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2012, 08:24
Привет! Вот еще темы с решениями:

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

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

Шифрование. Аргументы функции MAIN
Привет всем:) Нужна помощь... С++... Аргументы функции MAIN. Фраза...

Аргументы для функции main()
Я совершенно не понял, каким образом работает, допустим вот такой фрагмент...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru