Входной буфер c
достаточно велик только для строки из 9 символов. Любой более длинный ввод строки вызовет неопределенное поведение, хотя может потребоваться более 10, чтобы это неопределенное поведение стало заметным для пользователя.
- Увеличьте размер буфера и предотвратите переполнение буфера с помощью цифры c префикс int в спецификации преобразования
scanf
. - Обратите также внимание, что
fflush(stdin)
вообще не является переносимым *, не нужно, так как следующий scanf()
пропустит ожидающий пробел в любом случае. - Обратите внимание, что вам следует прекратить сканирование строки, когда вы достигнете нулевого терминатора.
Вот измененная версия:
#include <stdio.h>
int main() {
int r, x, i, n;
char buf[256];
if (scanf("%d", &n) == 1 && scanf("%255s", buf) == 1) {
r = 0, x = 0;
for (i = 0; i < n && buf[i] != '\0'; i++) {
if (c[i] == 'D')
r++;
if (c[i] == 'T')
x++;
}
printf("%d\t%d\n", r, x);
}
return 0;
}
*fflush()
заставляет буферизованный вывод записываться в связанный файл или устройство выходного потока. fflush()
имеет неопределенное поведение при вызове с потоком, не открытым для вывода. В некоторых системах поведение отклоняется от ожидающего ввода, но стандарт C не оправдывает такое поведение.