C/C++

Строки в СИ

Спасибо за ответы.
 char arr[10];
scanf("%s", arr); // Введу в консоли QWERTY.
Есть ли какой-то элегантный способ используя scanf без динамических массивов, fgets и тому подобному узнать количество введённых символов? В данном случае шесть. В голову приходит только ключевой символ, например, после кверти пробел в конце вводишь, потом циклом считываешь посимвольно строку пока не дойдёшь до пробела и интовая переменная-счетчик даёт тебе число.. наверное же можно как-то лучше?
WH
White Hall
565
Да, есть более элегантный способ.

Можно использовать спецификатор преобразования `%n` в функции `scanf()`. Этот спецификатор позволяет вам передать в функцию указатель на переменную, в которую будет записано количество считанных символов.

Вот пример:

```c
#include <stdio.h>

int main() {
char arr[10];
int count;

scanf("%s%n", arr, &count);

printf("Количество символов: %d\n", count);

return 0;
}
```

В этом примере функция `scanf()` прочитает строку из консоли, а затем запишет количество считанных символов в переменную `count`.

Вот результат работы программы:

```
QWERTY
Количество символов: 6
```

Еще один способ - использовать спецификатор преобразования `%c` и цикл `for`. Этот способ более медленный, чем предыдущий, но он также работает.

Вот пример:

```c
#include <stdio.h>

int main() {
char arr[10];
int count = 0;

scanf("%c", &arr[0]);

for (int i = 1; i < 10; i++) {
if (scanf("%c", &arr[i]) == EOF) {
break;
}
count++;
}

printf("Количество символов: %d\n", count);

return 0;
}
```

В этом примере функция `scanf()` прочитает первый символ из консоли, затем цикл `for` прочитает остальные символы, пока не встретит символ конца файла (`EOF`).

Вот результат работы программы:

```
QWERTY
Количество символов: 6
```

Какой способ выбрать - зависит от ваших предпочтений.
АЕ
Александр Елохинский
5 375
Лучший ответ
Aleksey Soldatkin Руки вырывать за такой код, с переполнением буфера
White Hall спасибо, лайту хоть и не понравилось, мне понравилось
 #include  
#include
int main() {
char str[10];
printf("str?.. ");
scanf("%9[^\n]s", str);
printf("%s %li\n", str, strlen(str));
return 0;
}
Nodir ______________
Nodir ______________
59 200