我在数组中尝试一个简单的输入/输出。 基本上,当用户输入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
答案 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;
}