使用loop_in_C一次获取一个角色

时间:2015-04-02 21:14:05

标签: c for-loop getchar putchar

我正在阅读C语言书,我坚持遵循代码...因为我已经显示了C代码我正在使用for()循环来获取char。同样的方式我使用for循环来打印屏幕上显示char ...如果用户按下输入,则循环将退出,而用于在屏幕上打印的另一个for()循环将使用i变量的值。但是屏幕上的结果是相反的。我可以得到你的意见我该怎么解决它?

#include <string.h>
#include <stdio.h>
int main()
{
int i;
char msg[25];
printf_s("Type up to 25 characters then press Enter..\n");
for (i = 0; i < 25; i++)
{
    msg[i] = getchar();// Gets a character at a time
    if (msg[i] == '\n'){
        i--;
        break;// quits if users presses the Enter
    }
}putchar('\n');
for (; i >= 0 ; i--)
{
    putchar(msg[i]);// Prints a character at a time 

}putchar('\n');/*There is something wrong because it revers the input */

getchar();
return 0;

2 个答案:

答案 0 :(得分:1)

输入后,变量i保存msg中的确切字符数。这就是i--语句的原因,因此当您输入ab<enter>时,您将拥有i == 2而不是i == 3.

第二个循环向后计数到0,这不是你想要的。您希望从0到i进行计数。现在你无法使用i来计算我。您需要两个变量:一个用于保持最大值,另一个用于实际计数。

我会让你决定如何做到这一点,因为这是学习的一部分。

答案 1 :(得分:0)

使用qsort排序如下。

#include <stdio.h>
#include <stdlib.h>

int cmp(const void *, const void *);

int main(void){
    int i, n;
    char msg[25];

    printf_s("Type up to 25 characters then press Enter..\n");
    for (i = 0; i < 25; i++){
        int ch = getchar();
        if(ch == '\n' || ch == EOF)
            break;//if (msg[i] == '\n'){i--; <<- this cannot be 25 character input.
        else
            msg[i] = ch;
    }
    putchar('\n');

    n = i;
    qsort(msg, n, sizeof(char), cmp);//sizeof(char) : 1

    for (i = 0; i < n ; ++i){
        putchar(msg[i]);
    }
    putchar('\n');

    getchar();
    return 0;
}

int cmp(const void *a, const void *b){
    unsigned char x = *(const char *)a;
    unsigned char y = *(const char *)b;
    return (x < y) ? -1 : (x > y);//Ascending order
}