char arr[10];
scanf("%s", arr); // Введу в консоли QWERTY.
Есть ли какой-то элегантный способ используя scanf без динамических массивов, fgets и тому подобному узнать количество введённых символов? В данном случае шесть. В голову приходит только ключевой символ, например, после кверти пробел в конце вводишь, потом циклом считываешь посимвольно строку пока не дойдёшь до пробела и интовая переменная-счетчик даёт тебе число.. наверное же можно как-то лучше?
C/C++
Строки в СИ
Спасибо за ответы.
Да, есть более элегантный способ.
Можно использовать спецификатор преобразования `%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
```
Какой способ выбрать - зависит от ваших предпочтений.
Можно использовать спецификатор преобразования `%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
```
Какой способ выбрать - зависит от ваших предпочтений.
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;
}
Похожие вопросы
- Задача на строки в Си
- Нужно не выводить пробел в конце строки. язык си (Андрей, даже ваш вариант сайт считает не рабочим... )
- Структуры и строки в си
- Строки в си, задача
- Переход на следующую строку при считывании данных из файла в Си
- Помогите написать код на Си, по теме "строки".
- Инкрементировать строки массива указателей. (Си)
- Си. Работа со строками.
- Помогите доработать код на СИ по теме строки
- Годится ли wchar_t для работы со строками UTF-8 в Си?