Здесь у меня есть код, который вводит из stdin поток символов в массив.Затем он преобразует этот массив в двумерный массив.Затем он меняет этот массив с порядка столбцов строк на порядок строк столбцов.Затем он распечатывает новый массив, создавая шифрование Цезаря.Проблема, с которой я столкнулся, заключается в том, что мой массив начинает вводить символы в массив со вторым символом, введенным пользователем, и я не уверен, почему.
Например, если я набираю «Hello» в консоли, только"Ello" помещается в массив.
Есть мысли?Спасибо!
//
// main.c
// Caesar Block Cypher
//
// Created by Jacob Byerline on 10/20/18.
// Copyright © 2018 Jacob Byerline. All rights reserved.
//
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(void){
//The size is extended by the input with the value of the provisional
char *str;
int inputChar;
int i, j;
size_t size = 0;
size_t len = 0;
printf("input string : ");
inputChar = getchar();
str = realloc(NULL, sizeof(char)*size);//size is start size
if(!str)return *str;
while(EOF!=(inputChar=fgetc(stdin)) && inputChar != '\n'){
if(isalpha(inputChar)){
str[len++]=inputChar;
if(len==size){
str = realloc(str, sizeof(char)*(size+=16));
if(!str)return *str;
}
}
}
str[len++]='\0';
int squareOfLen = sqrt(len);
int twoDimensionalArraySize = squareOfLen + 1;
//printf("%lu \n", len);
//printf("%d \n", squareOfLen);
//printf("%d \n", twoDimensionalArraySize);
char twoDstr[twoDimensionalArraySize][twoDimensionalArraySize];
char FINALtwoDstr[twoDimensionalArraySize][twoDimensionalArraySize];
memcpy(twoDstr, str, twoDimensionalArraySize * 2 * sizeof(int));
for(i=0; i<twoDimensionalArraySize; i++){
for(j=0; j<twoDimensionalArraySize; j++){
printf("2D Array[%d][%d] = %c\n",i,j,twoDstr[i][j]);
}
}
for(i=0; i<twoDimensionalArraySize; i++){
for(j=0; j<twoDimensionalArraySize; j++){
FINALtwoDstr[i][j] = twoDstr[j][i];
//printf("2D Array[%d][%d] = %c\n",i,j,FINALtwoDstr[i][j]);
printf("%c",FINALtwoDstr[i][j]);
}
}
printf("\n");
return 0;
}