我无法在下面的代码中找出错误,我想在列表中检查一个数字,如果存在,代码会打印"是",如果不存在,则打印"否"。我收到的输出是随机的是和否。有时它是正确的,但有时它是错误的。
{
int n, N, a[n], i, flag = 0;
printf("n , Nn");
scanf("%d%d", &n, &N);
printf("an");
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n; i++)
{
if(a[i] == N)
{
flag = 1;
break;
}
}
if(flag == 0)
printf("Non");
else
printf("Yesn");
return 0;
}
我试图获取一个大小为n的数组,用户随后将在代码中输入该数组,同时声明大小。我正在输入n的值,该值将在列表中找到。。然后使用for循环,我比较存储的每个数字,但我认为这里的代码失败了。
问题语句说,您需要找出给定的值N
是否存在于给定的n
值中。它不需要存储这些n
值。
所以只要一到就检查一下就足够了。。。放弃它,只记住测试的阳性结果。不需要数组。
这里有一个简化的实现:
int n, N, a, i, flag = 0;
puts("n , N");
scanf("%d%d", &n, &N);
puts("a");
for(i = 0; i < n; i++) {
scanf("%d", &a);
if(a == N)
flag = 1;
}
puts(flag ? "Yes" : "No");
首先,试着理解"某个程序员家伙"对你的帖子的评论。你的代码中有一个错误。您声明了数组a[n]
,而变量n
尚未初始化。因此,首先需要声明一个指针*a
,然后将数组的大小作为用户的输入,最后使用malloc()
函数在指针*a
中分配内存。这是工作代码:
#include<stdio.h>
#include <stdlib.h>
int main()
{
int n, N, *a, i, flag = 0;
printf("n , Nn");
scanf("%d%d", &n, &N);
a = (int *) malloc(sizeof(int) * n);
printf("an");
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n; i++)
{
if(a[i] == N)
{
flag = 1;
break;
}
}
free(a);
if(flag == 0)
printf("Non");
else
printf("Yesn");
return 0;
}