Если вы используете вашу программу из Xcode затем использовать Product
=>Scheme
=>Edit Scheme...
(ярлык Command<), чтобы установить аргументы командной строки (включая любые перенаправления ввода/вывода). Вы также можете установить дополнительные переменные среды здесь, если это необходимо.
Обратите внимание, что если вы планируете указать относительные пути в качестве аргументов командной строки, то рабочий каталог, возможно, потребуется установить надлежащим образом - этот параметр находится на вкладке Options
, справа от вкладки Arguments
в диалоге Edit Scheme...
.
ОБНОВЛЕНИЕ
К сожалению, кажется, что ошибка введена в Xcode 4 по-прежнему присутствует, по крайней мере, Xcode 6.4, что означает, что перенаправление ввода/вывода задается с помощью описанный выше способ в настоящее время не работает должным образом (как ни странно это работало правильно в Xcode 3 и ранее).
Чтобы обойти это, я предлагаю указать необязательное имя входного файла в командной строке, а затем явно обработать это в вашем коде, например.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[])
{
int number;
if (argc > 1)
{
FILE * fp = freopen(argv[1], "r", stdin);
if (fp == NULL)
{
perror(argv[1]);
exit(1);
}
}
printf("Number:\n");
scanf("%d", &number);
printf("The number is %d\n", number);
return 0;
}
Если вы не укажете аргумент командной строки, то STDIN будет читаться как обычно, но если вы укажете имя файла, то это будет использоваться вместо стандартного ввода, например,
$ ./my_program # reads from stdin
$ ./my_program numbers.csv # reads from numbers.csv
Как описано выше, в оригинальный ответ (слева для потомков, в случае, если эта ошибка будет исправлена в Xcode 7 или более поздней версии) вы можете задать аргумент командной строки в диалоге Edit Scheme...
:
Как указано выше, вы также должны установить рабочий каталог соответствующим образом - я обычно устанавливаю его на $(PROJECT_DIR)
, так что он находится в корневом каталоге проекта, но вы можете настроить его на все, что угодно:
'scanf ("% d ", number);' должно быть 'scanf ("% d ", & number);' – BLUEPIXY
Спасибо, что указали, что вне @BLUEPIXY! – Cesare