Вы, кажется, сбиваете с толку символы и строки. У вас есть строка
scanf("%s",&A[i][j]);
, которая считывает строку с пробелами из входных данных, а затем пытается сохранить ее в одном символе. Поскольку строка всегда будет содержать не менее двух символов (включая NUL-символ завершения), это ВСЕГДА будет превышать пространство для нее. В основном это будет безобидно (просто перезаписать A [i] [j + 1] и т. Д.), Но если вы используете полную ширину, это даст неопределенное поведение.
То, что вы на самом деле хотите, это
scanf(" %c", &A[i][j]);
, который пропустит любой пробел (например, символы новой строки из предыдущей строки ввода), а затем прочитает один непробельный символ. Поведение «пропустить пробел» происходит из явного пробела в начале строки формата.
Если вы не хотите пропустить все пробелы (хотите разрешить пробелы в вашемматрица, например), вам нужно будет вручную пропустить только новые строки (которые вы, вероятно, не хотите в вашей матрице), но не пробелы. Это можно сделать с помощью второго вызова scanf во внутреннем цикле
scanf("%*[\n]"); /* discard newlines */
scanf("%c", &A[i][j]);
эти два нельзя объединить в один вызов, так как первый вызовет сбой (и ничего не сделает), если нет новых строк.
В цикле печати у вас такая же путаница символов / строк, поэтому вам также необходимо изменить %s
на %c
.