Мне нужно получить ввод строки с числами, разделенными пробелами (может быть многократными пробелами).
Код, который я написал ниже, печатает Invalid number
только вход имеет такую форму:
8a
(символ после числа).
Например, если я введу a b c
, он не напечатает Invalid number
и не перейдет с программой.
В основномМне нужно проверить, содержит ли строка только цифры и пробелы .
Если он не выбрасывает Invalid number
Если он есть - заполнить * массив чиселс введенными этими числами.
printf("Enter numbers:\n");
fgets (str, sizeof(int)*(size+1)+size*size, stdin);
token=strtok(str," ");
for(int i=0; (i<size) && (token!=NULL); i++) {
if(sscanf(token,"%d%c",&numbers[i],&ch) == 2 && (ch != ' ' && ch != '\n')) {
printf("Invalid number\n");
return 0;
}
token=strtok(NULL," ");
}
Я попытался реализовать функцию strspn, как было предложено следующим образом:
printf("Enter numbers:\n");
fgets (str, sizeof(int)*(size+1)+size*size, stdin);
int index;
token=strtok(str," ");
for(int i=0; (i<size) && (token!=NULL); i++) {
if(sscanf(token,"%d",&numbers[i])==1){
index=strspn(token,"0123456789");
}if (str[index]!='\n'&&str[index]!='\0'){
printf("Invalid number\n");
return 0;
}
token=strtok(NULL," ");
}
для ввода: 8 8a 8
программа не печатает Invalid number