Вы можете использовать fgets
для чтения ввода как строки. Затем, получить номер или что-то, что вы хотите с этой строкой. Использование scanf
не может прочитать всю строку ввода, поскольку оно читает слово за словом из ввода.
Для удаления пробела в строке вы можете увидеть Удаление пробелов из строки в C.
Для преобразования строки в число с плавающей запятой вы можете использовать функцию strtof
. Подробнее на Как преобразовать строку в число с плавающей точкой?
Небольшой пример того, как вы можете получить входную строку и сделать с ней что-то, что вы хотите:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
void remove_spaces(char* s) {
const char* d = s;
do {
while (*d == ' ') {
++d;
}
} while (*s++ = *d++);
}
void copy_str(char *s) {
const char* d = s;
int i = 0;
while (isdigit(*d)) {
s[i] = *d++;
i++;
}
s[i] = '\0';
}
int main()
{
float number;
char str[30];
fgets(str, sizeof(str), stdin);
remove_spaces(str);
int len1 = strlen(str);
printf("remove_spaces: %s\n", str);
copy_str(str);
int len2 = strlen(str);
if(len1 > len2+1) {
number = strtof(str,NULL);
printf("FALSE -- number = %f\n", number);
return 0;
}
printf("copy_str: %s\n", str);
if(strlen(str) > 15) {
printf("too long\n");
return 0;
}
number = strtof(str,NULL);
printf("number = %f\n", number);
printf("Hello World");
return 0;
}
Выходные данные 1: символ пробела содержимого строки.
55 55
remove_spaces: 5555
copy_str: 5555
number = 5555.000000
Hello World
Выход 2: буквенный символ содержимого строки.
55 55c
remove_spaces: 5555c
FALSE number = 5555.000000
Выход 3: строка слишком длинная.
123456789101111111
remove_spaces: 123456789101111111
copy_str: 123456789101111111
too long