Если вы вводите ввод из файла, я думаю, он должен работать нормально, но если вы вводите ввод с терминала, то после ввода чисел с пробелами (например, 15 20 39
) вы нажимаете ввод, который является новой строкой символ \n
не EOF.
Для терминала вы выполнили несколько logi c вот так
- Так как последнее всегда будет
<char><newline>
, так что если делать scanf например, scanf("%hhu%c", (input + i), &temp)
. - Затем мы можем отметить конечное условие, например
if (temp == '\n')
{
// add the last character in the array then break
}
Я следил за logi c, как указано выше, и тестировал код на сайте onlinegdb.com (это немного избыточно, вы можете очистить его позже)
/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
#include <stdio.h>
#include<malloc.h>
int readInput(unsigned char input[], size_t inputMaxLength)
{
int size = 0; // We want to return the length of the string
for ( int i = 0; i < inputMaxLength; i++) { // We only want to capture n amount of chars
char c, d;
scanf("%hhu%c", &c, &d);
if (d != '\n') { // input + i to iterate through the input array
*(input + i) = c;
printf("i = %d , Read %d\n", i , *(input + i));
size++;
} else {
*(input + i) = c;
printf("i = %d , Read %d\n", i , *(input + i));
size++;
printf("Returning size\n");
return size; // this never occurs which means scanf never == EOF
}
}
return size;
}
int main()
{
size_t a = 5;
unsigned char *input = (char *)malloc(a*sizeof(char));
printf("%d", readInput(input, a));
return 0;
}
Вот мой результат для тестового примера
12 34 5
i = 0 , Read 12
i = 1 , Read 34
i = 2 , Read 5
Returning size
3