使用getchar()获取字符的输入,并使用putchar()打印其反面

使用getchar()获取字符的输入,并使用putchar()打印其反面,c,C,我刚刚学习了C语言中的数组,正在尝试制作一个程序,从标准输入中读取一系列字符,并将其存储在数组中,按相反顺序排序,然后在标准输出上打印出来。 预期结果示例: 请输入一个字符串。你好 输入的字符数=5 反向字符串是:olleH Q1 在我的程序中,没有提示询问用户要输入多少个字符,我不打算添加一个。它只计算存储在数组中的字符数。但是我在程序中使用的数组不是可变长度数组。是否可以每次接收不同数量的字符并按相反顺序打印出来? 我不确定当putchar()遇到null值时,它如何在stdout上打印出来

我刚刚学习了C语言中的数组,正在尝试制作一个程序,从标准输入中读取一系列字符,并将其存储在数组中,按相反顺序排序,然后在标准输出上打印出来。 预期结果示例:

请输入一个字符串。你好

输入的字符数=5

反向字符串是:olleH

Q1

在我的程序中,没有提示询问用户要输入多少个字符,我不打算添加一个。它只计算存储在数组中的字符数。但是我在程序中使用的数组不是可变长度数组。是否可以每次接收不同数量的字符并按相反顺序打印出来? 我不确定当putchar()遇到null值时,它如何在stdout上打印出来。我的意思是,如果我用空值初始化一个固定长度数组(比如字符串[10]={0};),将其元素按相反顺序排序,然后用putchar()打印出来,putchar函数遇到的第一个字符(字符串[0])将是“\0”。那么putchar是否跳过该元素?不打印空白?我想知道这一点,因为我不打算在程序中使用可变长度数组

问题2

另一个问题是,当我使用getchar从stdin接收用户输入时,for循环的条件应该是什么?我计划手动将数组的最后一个元素更改为“\0”,因为在书中,它说与getchar一起存储的最后一个元素是“\n”。但是如果我将条件写为(ch=getchar())!='\n'那么'\n'不会存储在数组中吗??我应该将条件写为(ch=getchar())!=EOF?但是,即使我没有使用fopen函数读取文件,我也可以在这里使用EOF吗

第三季度

在我编写的代码中,我定义的“bufferSize”变量出现错误。我看不出是什么导致了这个问题

多谢各位

# include <stdio.h>
# include <stdlib.h>
# define bufferSize 50

int i;
int getString (char string[], int bufferSize);
void printString ( char string[], int sizeString);
void reverseString ( char string[], int sizeString);

int main (void){

    char string[];
    int sizeString = 0;
    int bufferSize;

    sizeString = getString(string, bufferSize);
    reverseString(string, sizeString);
    printString(string, sizeString);

    return 0;
}

int getString (char string[], int bufferSize){

    printf("Please enter a string. ");
    for( i = 0; i < bufferSize && (string[i] = getchar())!=EOF; i++){
        sizeString++;
    }

    string[sizeString]='\0';

    printf("The number of entered characters = %d\n", sizeString); 

    return sizeString;
}

void reverseString ( char string[], int sizeString){
    int j = sizeString - 1;
    i = 0;
    int temp;

    while (i < j) {
        temp = string[i];
        string[i] = string[j];
        string[j] = temp;
        i++;
        j--;
    }

    return;
}

void printString(char string[], int sizeString) {
    printf("Reversed string is: ");
    for (i = 0; i < sizeString; i++) {
        putchar(string[i]);
    }
    return;
}
#包括
#包括
#定义缓冲区大小50
int i;
int getString(字符字符串[],int bufferSize);
void printString(字符字符串[],int sizeString);
void reverseString(字符字符串[],整数大小字符串);
内部主(空){
字符字符串[];
int sizeString=0;
int缓冲区大小;
sizeString=getString(string,bufferSize);
反向限制(字符串、大小限制);
打印字符串(字符串、大小字符串);
返回0;
}
int getString(字符字符串[],int bufferSize){
printf(“请输入字符串”);
对于(i=0;i
字符字符串[]无效
bufferSize
是未初始化的变量。通过宏将其替换为
50
#define bufferSize 50
的作用与在编辑器中使用“find And replace”将
bufferSize
替换为
50
代码中的任何地方一样。因此,预编译器更改
int bufferSize
int 50