scanf - C中的数组中的输出元素

时间:2015-11-22 12:39:59

标签: c

我在数组中尝试一个简单的输入/输出。 基本上,当用户输入1时, 它将遍历数组并打印第一个元素a [0] 之后,当我再次输入1时,它将打印第二个元素a [1],依此类推。

但是,现在,当我输入1时, 只打印出第一个元素a [0]。 我可以知道为什么会这样吗? 当我输入1时,我想打印出后续的数组元素。

    #include<stdio.h>
    int main()
    {
    int i;
    int ch;
     char *A[] = {"Hello", "Good", "Bye", "Name"};

    while (ch == 1){
            printf("enter number");
            scanf("%s",&ch);
       for (i = 0; i < 4; ++i){
        printf("Value = %s\n", A[i]);
        break;
    }
  }

}

当前输出

Enter number: 1
Hello
Enter number: 1
Hello

所需的输出

Enter number: 1
Hello
Enter number: 1
Good
Enter number: 1
Bye

1 个答案:

答案 0 :(得分:1)

请勿将int*传递给scanf,以便通过%s读取数据。

你的循环是完全错误的。试试这个:

#include<stdio.h>
int main(void)
{
    int i = 0;
    int ch = 1;
    const char *A[] = {"Hello", "Good", "Bye", "Name"};

    while (ch == 1){
        printf("enter number");
        if (scanf("%d",&ch) != 1) ch = 0;
        printf("Value = %s\n", A[i]);
        i++;
        if (i >= (int)(sizeof(A)/sizeof(A[0]))) ch = 0;
    }

    return 0;
}

或者匹配&#34;所需的输出&#34;:

#include<stdio.h>
#include<string.h> /* to use strcmp */
int main(void)
{
    int i = 0;
    int ch = 1;
    const char *A[] = {"Hello", "Good", "Bye", "Name"};

    while (ch == 1){
        printf("Enter number: ");
        if (scanf("%d",&ch) != 1) ch = 0;
        printf("%s\n", A[i]);
        if (strcmp(A[i], "Bye") == 0) break;
        i++;
        if (i >= (int)(sizeof(A)/sizeof(A[0]))) ch = 0;
    }

    return 0;
}