Создание матрицы символов и поворот ее на 180 градусов - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь ввести символы (#, * и.) В матрицу из строки N и столбца N.

Я пробовал код в этой ссылке ион вращает матрицу, но я не знаю, как изменить ввод с int на символы (символы).

Вот мой текущий код, и он не работает.

    m=n; //row and columns value are the same
    printf("No of columns: %d\n", m);

    if (n>100 || m>100) //break if n or m values is more than 100
    return 0;

    printf("Enter the elements in the array:\n");
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            scanf("%s",&A[i][j]);
        }
    }

    //store the elements in rotated matrix by iterating through all the elements in the marix 
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            rotatedA[i][j] = A[n-i-1][m-j-1];
        }
    }

    //print out the new matrix rotated by 180 degrees
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            printf("%s ",rotatedA[i][j]);
        }

    }


}

Вот формат ввода, формат вывода и некоторые примеры ввода-вывода из моей домашней работы Форматы и примеры Это изображение, но мне пока не разрешено публиковать изображение, поэтому я поместил его в ссылку.

1 Ответ

0 голосов
/ 25 октября 2019

Вы, кажется, сбиваете с толку символы и строки. У вас есть строка

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.

...