2009-12-04 2 views
0

Моя программа считывает список целых чисел от пользовательского ввода [клавиатуры] и вычисляет некоторую статистикуC++ читать перенаправлением файла, а также клавиатура

Пользователь вводит «х», чтобы завершить процесс ввода.

Так, например,

Введите целые числа, разделенные пробелом (введите й для выхода): 1 2 3 4 5 х

Но теперь я хочу, чтобы включить входы должны быть считано из перенаправления файла также. Таким образом, если число следует х в файле данных, программа должна взять его оттуда, если нет, то предложит пользователь

ответ

2

использовать isatty для дескриптора файла (0 для стандартного ввода)

примера:

#include <unistd.h> 
main(){ 
    if(isatty(0)) 
    puts("tty"); // print some prompt 
    else 
    puts("pipe"); // not really needed in your case 
} 
0

Вы можете читать строки из файла с помощью fstream and iostream.

Затем оттуда вы просто разбираете строки, чтобы увидеть, содержат ли они правильные данные. Если нет, попросите пользователя ввести данные?

0

Если то, что вы имеете в виду, что вы можете либо вызвать программу с файлом в качестве аргумента командной строки, или нет, в этом случае вы хотите, чтобы читать из стандартного ввода, вы можете сделать что-то вроде этого:

#include <fstream> 
#include <iostream> 

void run(std::istream& in) { 
    // read all input from 'in' and run your program as normal 
} 

int main(int argc, char **argv) { 
    if(argc == 1) { 
     run(std::cin); 
    } else if(argc == 2) { 
     std::ifstream fin(argv[1]); 
     run(fin); 
    } 

    return 0; 
} 

Таким образом, если вы звоните

./prog 

он будет читать из стандартного ввода (например, клавиатура), и, если вы звоните

./prog foo.txt 

он будет читать из файла foo.txt.

Возможно, вы захотите немного поработать при проверке аргументов командной строки, но это основная идея.

0

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

На обеих оболочках Windows и Unix < перенаправляет файл на stdin для программы.

Так, на Unix/Linux/Mac на консоли:

./app < file.txt 

или окна, в командной строке, всего:

app < file.txt 

будет принимать содержимое file.txt и отправьте его как stdin к программе под названием 'приложение'.

0

На UNIX поле должно работать:.

progream <file 

где программа программа и файл содержит вход, который пользователь должен ввести в

Смежные вопросы