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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.11.2008, 12:34     Аргументы N2 командной строки посимвольно не считывается. #1
Вот, всё предельно просто. Действительно, имеем такую программу

Код
#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++ Неясность (аргументы командной строки)
C++ Аргументы командной строки
C++ Аргументы командной строки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.11.2008, 13:13     Аргументы N2 командной строки посимвольно не считывается. #2
Вот мой вариант:
Код
int main(int argc, char **argv)
{
	do
		printf("%c\n", *argv[1]);
	while(*argv[1]++);
. . .
Она выводит и второй и все последующие. Первый символ, исходя из моего кода, достать не должно составить проблем для тебя.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
04.11.2008, 15:09  [ТС]     Аргументы N2 командной строки посимвольно не считывается. #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
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.11.2008, 16:02     Аргументы N2 командной строки посимвольно не считывается. #4
Да все ты правильно делаешь. И у меня все нормально выводится. вот этот код:
Код
int main(int argc, char *argv []) {

 printf ("%c\n", (*(++argv)) [0]);
при вызове с параметром 123 нормально выведет единицу.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
21.08.2011, 18:03  [ТС]     Аргументы N2 командной строки посимвольно не считывается. #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 Посмотреть сообщение
долго же ты разбирался
Два года почти. Всю литературу перерыл, наверное..

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

Текущее время: 00:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru