Моя программа должна принимать входные данные файла, и если он не задан, она должна учитывать вводимые пользователем данные.
Когда я подаю входной файл в программу, вот так:
./sim < ex1_in
все работает как надо!
Однако, когда я указываю входной файл в качестве аргумента файла, например:
./sim ex1_in
, программа ищет ввод данных пользователем.
Это часть кода, которая обрабатывает аргументы ввода и файла:
int main(int argc, char * argv []) {
if (argc > 3) {
fprintf (stderr, "Error: Too many arguments.\n");
return 1;
}
FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
if (!fp) { /* check file */
fprintf (stderr, "Error: File Open Failed '%s'.\n", argv[1]);
return 2;
}
//Initializing array of 256 unsigned chars
unsigned char binary[256];
int i = 0;
unsigned char c;
int count2 = 0;
//populate the 256 byte char array from stdin
while (count2 < SIZE) {
c=getchar();
binary[i] = c;
i++;
count2++;
}
До сих пор я идентифицировал этот цикл while
как проблемную область, как при комментированиивне, нежелательное поведение не происходит.Но я не уверен, почему это так.
Позже в методе main
файл закрывается:
if (fp != stdin) fclose (fp); /* close file if not stdin */
Другая важная вещь:
#define SIZE 256