Это похоже на домашнее задание, поэтому я постараюсь дать вам несколько полезных советов.
Сначала прочтите описание функции fscanf и описание преобразования "% s".
Вот фрагмент из описания, которое у меня есть для "% s":
Соответствует последовательности символов, не являющихся пробелами;следующий указатель должен быть указателем на массив символов, который достаточно длинный, чтобы содержать входную последовательность и завершающий нулевой символ ('\ 0'), который добавляется автоматически.Входная строка останавливается на пустом месте или на максимальной ширине поля, в зависимости от того, что произойдет раньше.
Вот два важных момента:
- Каждая из ваших строк ввода содержит числаи пробельные символы.Таким образом, функция прочитает число, достигнет пробела и остановится.Он не будет читать 9 символов.
- Если он прочитал 9 символов, в вашем массиве недостаточно места для хранения необходимых 10 байт .Обратите внимание, что будет добавлен завершающий нулевой символ.Прочитано 9 символов, плюс 1 ноль, равно 10. Это распространенная ошибка в программировании на C, и лучше всего научиться теперь всегда учитывать завершающий ноль в любой строке C.
Теперь, чтобыисправьте это, чтобы прочитать символы в двумерном массиве: вам нужно использовать другую функцию.Просмотрите список функций C stdio.
Увидите что-нибудь полезное звучание?
Если нет, я дам вам подсказку: fread.Он будет читать фиксированное количество байтов из входного потока.В вашем случае вы можете указать, чтобы он всегда читал 9 байтов.
Это сработало бы, только если каждая строка гарантированно дополняется до 9 символов.
Другая функцияэто fgets.Опять же, внимательно прочитайте документацию по функциям.fgets - еще одна функция, которая добавляет завершающий ноль.Тем не мение!В этом случае, если вы укажете fgets размером 9, fgets будет читать только 8 символов и записывать завершающий ноль в качестве 9-го символа.
Но есть и другой способ!Вернуться к FSCANF!
Если вы посмотрите на другие спецификаторы преобразования, вы можете использовать "% 9c", чтобы прочитать 9 символов.Если вы используете эту операцию, она не будет добавлять завершающий нуль в строку.
Используя fread и fscanf "% 9c", если вы хотите использовать эти 9 байтов в качестве строки в других функциях, таких как printf, вам потребуется сделать ваши буферы 10 байтами, и после каждой функции fread или fscanf выпотребуется написать save[9] = '\0'
.
Всегда внимательно читайте документацию.Строковые функции C иногда делают это одним способом. Но не всегда.