Пожалуйста, смотрите этот ответ относительно использования strtol () . Это безопасный способ преобразования произвольных входных данных, которые должны быть строковым представлением целого числа, сохраняя при этом байты мусора для дополнительного анализа.
Используя его, ваш код будет выглядеть примерно так:
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#ifdef LINUX_VERSION
#include <curses.h>
#else
#include <conio.h>
#endif
#define BUFF_SIZE 1024
int main(void)
{
char str1[BUFF_SIZE], *garbage = NULL;
long num = 0;
printf("Enter the Number ");
scanf("%s",str1);
errno = 0;
num = strtol(str1, &garbage, 0);
if (errno) {
printf("The number is invalid\n");
return 1;
}
printf("You entered the number %ld\n", num);
if (garbage != NULL) {
printf("Additional garbage that was ignored is '%s'\n", garbage);
}
getch();
return 0;
}
Это не исправляет все, что вызывает сомнения относительно того, что вы опубликовали, но это должно помочь вам лучше начать.
Вывод:
tpost@tpost-desktop:~$ ./t
Enter the Number 1234abdc
You entered the number 1234
Additional garbage that was ignored is 'abdc'
Скомпилировано с помощью:
gcc -Wall -DLINUX_VERSION -o t t.c -lcurses
Я не уверен, какую платформу вы используете, поэтому могут потребоваться дополнительные исправления в коде.