Ввод из строки выполнения в терминале в c - PullRequest
0 голосов
/ 30 ноября 2011

Проблема, с которой я столкнулся, заключается в том, что я должен написать игру в Ханойскую башню на языке c, и ввод числа колец не должен быть в программе, но код должен прочитать количество колец в исполнении.

Пример: ./hanoistower 3

И код должен получить 3 в качестве ввода.Как я могу это сделать?

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

Аргументы командной строки передаются в виде строк через функцию main () вашей программы на C.

В int main(int argc, char *argv[]) argc - это число аргументов, а argv - это массив строк, содержащих аргументы.Обратите внимание, что само имя программы всегда является первым «аргументом».

Поскольку аргументы передаются в виде строк, вам, вероятно, нужно преобразовать 3 в целое число, что можно сделать с помощью atoiфункция.Вот начало:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   int rings;
   if(argc != 2) {
       printf("Usage: %s number-of-rings\n",argv[0]);
       return 1;
   }

   rings = atoi(argv[1]);
   printf("Using number-of-rings = %d\n", rings);
...

   return 0;
}
2 голосов
/ 30 ноября 2011

Я настоятельно рекомендую прочитать хорошую книгу по программированию на Си.Это будет намного быстрее, чем задавать вопросы здесь.

Однако, аргументы программы задаются в виде массива строк с нулевым символом в конце для главной функции, которая обычно объявляется как

 int main (int argc, char**argv) { /*...*/ }

, есливы запускаете вашу программу с ./hanoistower 3, и если ваш hanoistower.c является вашим исходным кодом (который необходимо скомпилировать с включенными отладкой и предупреждением, например, gcc -Wall -g hanoistower.c -o hanoistower в Linux), то у вас есть один дополнительный аргумент, поэтому

  1. argc == 2
  2. argv[0] - это строка "./hanoistower"
  3. argv[1] - это строка "2" (используйте atoi для преобразования ее в int)
  4. argv[2] is NULL

Пожалуйста, научитесь использовать отладчик (gdb в Linux).

0 голосов
/ 30 ноября 2011

Просто добавьте argc и argv в список параметров метода main, как показано ниже:

int main ( int argc, char *argv[] )

Затем используйте argv в качестве переменной, чтобы указать количество колец внутри вашего кода.

...