2013-04-10 3 views
0

안녕 모두들 나는 아래와 같이 매트릭스 입력 프로그램을 가지고있다. 그러나 빈 또는 복잡한 또는 NaN 입력 루프에 실패합니다. 나는 다양한 종류의 방법에 지쳤으나 여전히 효과가 없습니다. 이 문제를 해결하기 위해 여러분 모두에게 조언을 구할 수있게되기를 진심으로 바랍니다.원하는 출력을 위해 루프하는 방법?

clear;clc 
m=2; 
for i = 1:m 
    for j = 1:m; 

     element_A = ['Enter the element in row ' num2str(i) ', col ' num2str(j) ': ']; 
     A(i,j) = input(element_A); 

     while isnan(A(i,j)) || ~isreal(A(i,j)) || isempty(A(i,j)) 
      fprintf('Input not valid') 
      element_A = ['Enter the element in row ' num2str(i) ', col ' num2str(j) ': ']; 
      A(i,j) = input(element_A); 
     end   

    end 
end 

%% sample loop 
m = str2double(input('??? : ', 's')); 
while isnan(m) || ~isreal(m) || m<0 
    m = str2double(input('Enter valid value : ', 's')); 
end 
+1

"작동하지 않음"이란 의미를 지정해주십시오. 'nan'과 복소수의 경우 코드가 잘 작동하는 것 같습니다. 그것은 빈 줄에 대해서만 충돌합니다. (숫자를 입력하지 않고 리턴을 누르십시오.) –

+0

@ H.Muster 숫자 값을 삽입하지 않고 직접 enter 키를 누르거나 복소수 i 또는 j를 삽입하면 "Input not valid"메시지가 표시되지 않습니다. 입력 메시지를 다시 입력하라는 메시지가 다시 나타납니다. 그냥 입력을 누르면 프로세스가 다시 입력 메시지를 표시하지 않고 종료됩니다. 반복하지 않습니다. 내 루프가 실패했습니다.) – green

+3

왜냐하면 'i '및'j'를 인덱스로 사용합니다. 따라서, 그들의 상상의 가치를 덮어 씁니다. – HebeleHododo

답변

1

A에 할당하기 전에 NaN, 복잡한 값 및 빈 입력을 확인해야합니다. 당신은 이런 식으로 작업을 수행 할 수 있습니다 내가 처음에 isempty 검사를 이동

m=2; 
A = zeros(m); % You do not have to do this but it will increase the performance of your code. 
for idx = 1:m 
    for jdx = 1:m; 
     element_A = ['Enter the element in row ' num2str(idx) ', col ' num2str(jdx) ': ']; 
     inputElement = input(element_A); 
     while isempty(inputElement) || isnan(inputElement) || ~isreal(inputElement) 
      fprintf('Invalid input'); 
      inputElement = input(element_A); 

     end 
     A(idx,jdx) = inputElement; 
    end 
end 

공지 사항. ||은 단락 회로 연산자이며 다음 값을 확인하지 않습니다. 첫 번째 요소는 true입니다. 나중에 isnan이라고 말하면 오류가 발생합니다.

+0

34ert와 같이 입력하면 "Error : Unexpected MATLAB operator."가 표시됩니다. 명령 창에서 프로그램이 종료되거나 단순히 q 또는 w 또는 e와 같은 문자를 입력하면 ... "정의되지 않은 함수 또는 변수 'q'가됩니다."...이 모든 것을 무시하고 반복 할 수 있습니까? ? – green

+0

@green 아마도 숫자로 시작했기 때문일 것입니다. 긴 문자열에는 잘 작동합니다. 이를 위해 try/catch 블록을 사용해야합니다. 최근에 MATLAB을 배우기 시작했다고 가정합니다. 그것이 정말로 중요하지 않다면, 나는 그것을 나중에 남겨 두라고 말할 것입니다. – HebeleHododo

+0

@HebeleHododocould u 그냥 방금 위의 내 게시물에 게시 된 샘플 루프를 확인합니다. 나는 왜 그 경우에는 모두 무시할 수 있으며 루핑을 진행할 수 있으며이 현재 예제에 적용 할 수 없습니다. 이걸 이해하는 것 – green

관련 문제