通过用户输入循环并在C中反转字符数组?

时间:2015-10-10 02:31:51

标签: c

我正在尝试使用while循环作为字符数组来获取用户的输入(此数组的最大长度为255个字符)。这是我到目前为止所做的,但输入数据后按Enter键没有任何反应。

#include <stdio.h>

int main()
{
    char inputString[255];

    printf("Enter a line of text up to 255 characters\n");

    int i = 0;
    while(i <= 255) {
        scanf(" %c", inputString);
        i++;
    }

    // Display Reversed String
    int x;
    for(x = 255; x >= 0; --x) {
        printf("%c", inputString[x]);
    }

    return 0;
}

我是C的新手,并且不了解我的代码有什么问题。

先谢谢。

例如:&#34; Hello World!&#34;应打印&#34; !dlroW olleH&#34;

2 个答案:

答案 0 :(得分:1)

除了两件事之外你几乎得到了它

  1. c中的索引从0转到N - 1,因此不是

    int i = 0;
    while(i <= 255) {
    

    应该是

    for (int i = 0 ; i < sizeof(inputString) ; ++i) {
    

    你可以看到循环从i == 0i == 254i < 255而不是i <= 255。反向循环也是如此,它应该从sizeof(inputString) - 1254开始。

    小心使用sizeof运算符。

  2. 您必须将地址传递给下一个字符。

    scanf(" %c", &inputString[i]);
    
  3. 更好的方法是

    int next;
    next = 0;
    for (int i = 0 ; ((i < sizeof(inputString) - 1) && ((next = getchar()) != EOF)) ; ++i)
        inputString[i] = next;
    

答案 1 :(得分:0)

这接受任意长度的输入。

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

typedef struct ll {
    struct ll *next, *prev;
    char c;
} ll_t;

ll_t *
newll() {
    ll_t *rv;
    if ((rv = calloc(sizeof (ll_t), 1)) != NULL)
        return rv;      
    fprintf(stderr, "out of memory, fatal\n");
    exit(-1);
}

int 
main()
{
    ll_t *llp = newll();
    printf("Enter text to put in reverse order: ");
    while((llp->c = getchar()) != EOF) {
        if (llp->c == '\n')
            break;
        llp->next = newll();    
        llp->next->prev = llp;
        llp = llp->next;
    }
    for( ; llp != NULL; llp = llp->prev) 
        putchar(llp->c);
    putchar('\n');
}