вы должны использовать strtol или друзей (код, в основном, основан на man strtol и getline):
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int get_Int(int *a)
{
if (!a)
return 0;
while (1) {
char *line = NULL, *endptr = NULL;
size_t len = 0;
ssize_t nread = getline(&line, &len, stdin);
long n;
if (nread == -1)
continue; // read failed
errno = 0; /* To distinguish success/failure after call */
n = strtol(line, &endptr, 10 /* assuming base10 */ );
/* Check for various possible errors */
if ((errno == ERANGE && (n == LONG_MAX || n == LONG_MIN))
|| (errno != 0 && n == 0)) {
printf("number out of range, please retry\n");
continue; // over/under flow
}
if (endptr == line || *endptr != '\n') {
// No digits were found or not all input was consumed
printf("Please input integers\n");
continue;
}
*a = n;
free(line);
break;
}
return 1;
}
int main()
{
int n, t;
get_Int(&n);
for (int k = 0; k < n; k++) {
printf("Input next number\n");
get_Int(&t);
printf("%d\n", t);
}
}
Это означает, что вы должны прочитать строку отдельно и извлечь значение после.Вы можете заметить, что существует много проверок для проверки правильности вызова, и кусок кода здесь далек от совершенства, потребуется некоторое разъяснение о возвращаемых значениях вашей функции ...