我想制作一个程序,将一些逻辑门(AND
,OR
,XOR
)应用于两个1和0数组的元素。但是我遇到了问题用户输入这些数组。我不知道如何使数组只存储1和0,例如,如果我输入5,我希望程序告诉我它既不是0也不是1并重新开始,我尝试了一些东西,但它&# 39;不工作:
int v1[50],v2[50],i,j,n;
printf("Number of elements in arrays : ");
scanf("%d",&n);
printf("Introduce elements of first array :\n");
for(i=0;i<n;i++)
if(v1[i] == 0 || v1[i]==1)
scanf("%d",&v1[i]);
else (i'll make it a function and I want it to repeat if the elements given are not 1 and 0)
for(i=0;i<n;i++)
printf("%d",v1[i]);
答案 0 :(得分:1)
在第一个for循环中,您正在读取输入,您应首先读取输入,然后决定是否要让用户再次尝试输入。因此,for循环的前几行应如下所示:
for (i = 0; i < n; i++) {
scanf("%d", &v1[i]);
if (!(v1[i] == 0 || v1[i] == 1)) {
printf("Invalid input, please try again");
//Ask for another input, but do not advance i
}
}
此代码将告诉用户他们是否输入了错误字符,但它不会正确更新数组。要做到这一点,你需要做的就是减少一次。这将使v1
中之前的“坏”值被覆盖。
for (i = 0; i < n; i++) {
scanf("%d", &v1[i]);
if (!(v1[i] == 0 || v1[i] == 1)) {
printf("Invalid input, please try again");
i--;
}
}
但是,我们还没有完成。在原始代码中,您将v1定义为包含50个元素的数组。如果有人想输入51个元素怎么办?最终你最终会访问一个超出范围的数组索引,这可能会导致一些非常大的问题。因此,您需要使用malloc
进行一些动态内存分配
int *v1, i, n;
printf("How many elements will be in the bit array? ");
scanf("%d", &n);
//Dynamically allocate enough memory for an integer array of length n
v1 = (int *) malloc(n * sizeof(int));
您可以阅读有关malloc here的更多信息。 所以,整个代码看起来像这样:
#include <stdlib.h>
#include <stdio.h>
int main() {
int *v1, i, n;
printf("How many elements will be in the bit array? ");
scanf("%d", &n);
//Dynamically allocate enough memory for an integer array of length n
v1 = (int *) malloc(n * sizeof(int));
printf("Input the elements of the first array (separated by newlines):\n");
for (i = 0; i < n; i++) {
scanf("%d", &v1[i]);
if (!(v1[i] == 0 || v1[i] == 1)) {
printf("Invalid input, please try again");
i--;
}
}
答案 1 :(得分:0)
假设您有一个由50个元素组成的数组:
int v1[50];
如果您希望仅使用0
和1
的值填充它,则应设置while
循环,直到用户输入正确的数据:
int iter, result;
for (iter = 0; iter < 50; iter++)
{
while ((result = scanf("%d", &v1[iter])) != 1 // no number was found
|| (v1[iter] != 0 && v1[iter] != 1)) // OR it was and it wasn't 0 or 1
{
if (result != 1)
scanf("%*s"); // case 1: dispose of bad input
else
printf("Please, use only values 0 or 1\n"); // case 2: remind the user
}
}
}