입력을 읽는 첫 번째 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
}
}
이 코드는 사용자에게 말할 것이다, 그러나 그것은 올바르게 배열을 업데이트하지 않습니다. 이렇게하기 위해서, 당신이해야 할 일은 한 번 감소입니다. 그러면 이전에 "bad"값이 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과 50 사이의 숫자를 입력하는 것에 의존하지 마십시오! –