为什么这个反向字符串程序不起作用?

时间:2017-07-23 19:03:52

标签: c

我是C编程的新手,所以请原谅我的天真。输出时的以下程序无法打印输入字符串的最后一个字符作为输出字符串的第一个字符。

例如:

$.getJSON( "users.json", function( data ) {
   var userData = data[userId]; // your user data
}

为什么Enter no. of elements: 5 Enter string: hello The reversed string is: lleh 不能打印?

o

3 个答案:

答案 0 :(得分:2)

你需要注意一个副作用:

  • scanf("%d", &n);之后,输入流缓冲区中有一个待处理的换行符。

  • 当您稍后输入n个字符时,scanf("%c", &string[i])首先读取待处理的换行符,然后输入n-1个第一个字符,输入的其余部分将保留在输入缓冲区中

scanf()是一个非常笨重的功能。很难正确使用。

以下是解决问题的方法:

#include <stdio.h>

int main() {
    char string[10000];
    int i, n, c;

    printf("Enter no. of elements: ");
    if (scanf("%d", &n) != 1 || n < 0 || n > 10000)
        return 1;

    // read and discard pending input
    while ((c = getchar()) != '\n' && c != EOF)
        continue;

    printf("Enter string: ");
    for (i = 0; i < n; i++) {
        if (scanf("%c", &string[i]) != 1)
            break;
    }
    // the above loop could be replaced with a single call to fread:
    // i = fread(string, 1, n, stdin);

    printf("The reversed string is: ");
    while (i-- > 0) {
        printf("%c", string[i]);
    }
    printf("\n");
    return 0;
}

答案 1 :(得分:0)

您的scanf()应以空格(more info about that)开头。这是代码:

#include <stdio.h>

int main() {
    printf("Enter no. of elements: ");
    int n;
    scanf(" %d", &n);
    char string[10000];
    printf("Enter string: ");
    for (int i = 0; i < n; i++) {
        scanf(" %c", &string[i]);
    }
    /* Just to be safer. */
    string[n] = '\0';
    printf("The reversed string is: ");
    for (int i = (n-1); i >= 0; i--) {
        printf("%c", string[i]);
    }
    printf("\n");
    return 0;
}

答案 2 :(得分:0)

  

将空格添加到格式字符串使scanf能够使用   每次按下时输入的换行字符   返回。没有空格,string[i]将收到空间   char '\n'

因此,在第11行只有一个空格放在格式说明符%c之前。 scanf(" %c", &string[i]);