c - 数组输入在 C 中按一个索引关闭。凯撒块移位
问题描述
在这里,我有从标准输入将字符流输入到数组中的代码。然后将该数组转换为二维数组。然后它将该数组从行列顺序更改为列行顺序。然后它打印出创建凯撒移位加密的新数组。我遇到的问题是我的数组开始使用第二个用户键入的字符将字符输入到数组中,我不知道为什么。
例如,如果我在控制台中键入“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;
}
解决方案
消除
inputChar = getchar();
这将从您的输入流中占用“H”。
#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;
}
printf("%c", inputChar);
}
}
printf("\n");
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;
}
输出
Hleol
推荐阅读
- javascript - 在 React 中跨项目拆分功能?
- javascript - 从中间网站重定向获取位置
- java - 将 Jsch 与 InputStream 一起使用会引发 NullPointerException
- php - php if 在 windows 和 linux 中的行为不同
- swiftui - SwiftUI - ScrollViewReader 滚动到顶部,包括填充(锚点加常量)
- jenkins - 詹金斯在舞台级别的发布操作受 buildResult 的影响
- image-processing - INTA图像的批量转换
- animation - 使用 JAVA FX 旋转图像
- python - 如何在 python 中从 twitter 中的用户数据字典中获取/访问“名称”属性?
- angular - angular2+:如何遍历三态(不确定)复选框的值