Вы путаете стандартный ввод с аргументами командной строки вашей программы .Аргументы командной строки - это список строк, которые вы включаете в командную строку при вызове вашей программы.Например:
$ ./myProgram arg1 arg2 ... argn
Они читаются через argv
и argc
, которые соответственно представляют «вектор аргумента» и «количество аргументов».По соглашению, первый аргумент - это рабочий каталог вашей программы.В этом примере у вас будет:
argv == {"/path/to/myProgram", "arg1", "arg2", ..., "argn"}
argc == n
в начале main
.Вы должны быть осторожны, чтобы не читать из argv
за пределами, проверяя argc
, как с любым необработанным массивом.
Стандартный ввод , с другой стороны, является потока данных, которые поступают в вашу программу на протяжении вызова main
.Это читается с использованием std::cin
.
int main(int argc, char** argv){
std::string s;
std::cin >> s; // read from standard input
}
Когда вы запустите эту программу, она будет блокироваться в указанной строке, пока не получит данные со стандартного ввода.Эти данные можно ввести, набрав вручную во время работы программы из командной строки:
$ ./myProgram
hello
илиперенаправление ввода:
$ echo "hello" | ./myProgram
$ ./myProgram < hello.txt
В трех приведенных выше примерах s
будет содержать первое слово текста изввод, и вы можете использовать его для чего угодно в следующей строке.
Обратите внимание, что std::cin >> s
будет читать текст, пока не достигнет первого символа пробела.К счастью, есть простые способы прочитать всю строку из stdin и прочитать все из stdin