Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
#1

Аргументы N2 командной строки посимвольно не считывается. - C++

04.11.2008, 12:34. Просмотров 1253. Ответов 6
Метки нет (Все метки)

Вот, всё предельно просто. Действительно, имеем такую программу

Код
#include <stdio.h>
int main (int argc, char* argv []) {
 printf ("%c\n", **++argv);
 printf ("%c\n", (*++argv) [0]);
 getchar (); 
 return 0; 
};
Озаглавливаем её <имя программы>. После заходим в консоль и запускаем так:
<имя программы.exe> asdfgh

Понятно, что стока asdfgh это второй аргумент. И программа, понятно, должна вывести нулевой символ этой строки. Вот по этой команде
printf ("%c\n", **++argv);

или по этой
printf ("%c\n", (*++argv) [0]);

Вместо этого выводится буква ё Очень-очень странно. Спасибо всем заранее, кто откликнется.

ОС Windows XP Home Edition
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2008, 12:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Аргументы N2 командной строки посимвольно не считывается. (C++):

Аргументы командной строки - C++
Пытаюсь разобраться с этой штукой. У Дейтела это собственно только дополнение, а не отдельный пункт раздела так что всё написано сжато и с...

Аргументы командной строки - C++
int main(int argc,int **argv) Понял только,что argc отвечает за количество аргументов,а argv-массив указателей на строки символов.Но...

Аргументы командной строки - C++
Есть прога, которая считывает файл посимвольно и выводит количество повторений символов в консоль. Открытие файла происходит так: FILE...

Аргументы командной строки - C++
Уважаемые форумчане, растолкуйте, пожалуйста, назначение третьего аргумента &quot;char *const options&quot; в функции GetOptList . Для чего он данном...

Аргументы командной строки - C++
Здравствуйте, у меня вопрос, почему программа сбрасывается, так и не выполнив никаких действий? Я знаю , что она возвращает 0 и выходит,...

Аргументы командной строки - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;fstream&gt; #include &lt;string.h&gt; #include &lt;Windows.h&gt; #include &lt;string&gt; using...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.11.2008, 13:13 #2
Вот мой вариант:
Код
int main(int argc, char **argv)
{
	do
		printf("%c\n", *argv[1]);
	while(*argv[1]++);
. . .
Она выводит и второй и все последующие. Первый символ, исходя из моего кода, достать не должно составить проблем для тебя.
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
04.11.2008, 15:09  [ТС] #3
Да, Ваша программа работает, спасибо. Я с ней разобрался даже. Но почему не работают другие кострукции в ниженаписанной программе? Вот программа
В ней ваша строчка работает, а 2 моих нет. Почему?

Код
#include <stdio.h>
int main(int argc, char *argv []) {

//Эту строчку предложили Вы
 printf("%c\n", *argv[1]);

//А вот  эту стрчку предложил я
 printf ("%c\n", (*(++argv)) [0]);

//И эту тоже я
 printf ("%c\n", *(*(++argv)));

 return 0; 
};
Подробнее по моим строкам. Поправьте меня, где я неправ.
Пусть програма запущена <имя программы.exe> fghjk

1)Инкриминируем argv После (++argv) переменная argv содержит адрес {указателя на символ f}

2)После *(++argv) переменная *(++argv) содержит адрес символа f

3)Теперь просто берём символ f вот так *(*(++argv)) и пробуем его напечатать.
printf ("%c\n", *(*(++argv)) );
Печатается буква ё

4)Наконец, помня, что *(++argv) указывает на f, а f нулевой символ массива, пытаемся напечатать его по-другому
printf ("%c\n", (*(++argv)) [0]);
Печатается буква ё

Почему буквы ё? Всё же правильно делаю!
Друзья! Помогите, пожалуйста, кому не лень, а то я сам не разберусь.

P. S. Понятное дело, там цикл необходимо будет использовать, если нужно вывести посимволно весь аргумент. НО сперва бы разобраться с выводом одного символа!
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.11.2008, 16:02 #4
Да все ты правильно делаешь. И у меня все нормально выводится. вот этот код:
Код
int main(int argc, char *argv []) {

 printf ("%c\n", (*(++argv)) [0]);
при вызове с параметром 123 нормально выведет единицу.
kravam
быдлокодер
1694 / 881 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
21.08.2011, 18:03  [ТС] #5
Короче, разобрался. Кому интересно если, вот мои ошибки. По не опыту лишний раз инкриминировал указатель. Надо так (последовательно правильные варианты первого и второго кодов):
C++
1
2
3
4
5
6
#include <stdio.h>
int main (int argc, char* argv []) {
 printf ("%c\n", **++argv);
 printf ("%c\n", (*argv) [0]);
 return 0; 
};

C++
1
2
3
4
5
6
7
#include <stdio.h>
int main(int argc, char *argv []) {
 printf("%c\n", *argv[1]);
 printf ("%c\n", (*(++argv)) [0]);
 printf ("%c\n", *(*(argv)));
 return 0; 
};
Nameless One
21.08.2011, 18:29
  #6

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
Короче, разобрался
долго же ты разбирался

nameless
21.08.2011, 19:33     Аргументы N2 командной строки посимвольно не считывается.
  #7

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
долго же ты разбирался
Два года почти. Всю литературу перерыл, наверное..

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2011, 19:33
Привет! Вот еще темы с ответами:

Аргументы командной строки - C++
Необходимо открыть файл на чтение, используя аргументы main. Не хотелось бы прописывать путь к файлу, который хотим открыть. Файл помещен в...

Передать аргументы командной строки - C++
как передать 2 аргумента для командной строки Вот я хочу передать имя входного файла и значение типа int вот как я делаю ...

Неясность (аргументы командной строки) - C++
nextArg = 1; while (nextArg &lt; argc) { if ((strlen(argv) &gt; 1) &amp;&amp; ('-' == argv)) ... } Прошу вас...

Распечатать аргументы командной строки - C++
Если первый аргумент командной строки - опция -а , то распечатать остальные аргументы без их первых символов , а если первой идет опция -r...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.08.2011, 19:33
Ответ Создать тему
Опции темы

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