2010-08-04 27 views
12

Làm thế nào để thoát khỏi tập tin m matlab (KHÔNG phải bản thân MATLAB) nếu người dùng nhập các thông tin nhập không hợp lệ? Tôi biết nếu một tập tin m-sai đi vào thời gian chạy chúng ta có thể nhấn Ctrl-C để ngăn chặn nó. nhưng tôi cần một lệnh để đặt nó trong tập tin m của tôi để làm như vậy nếu một cái gì đó xấu xảy ra.Làm thế nào để thoát khỏi tập tin m matlab (KHÔNG phải bản thân MATLAB) nếu người dùng nhập các thông tin nhập không hợp lệ?

Vui lòng không đề xuất các lệnh 'thoát' hoặc 'thoát' khi chúng chấm dứt toàn bộ MATLAB và tôi không muốn.

Trả lời

6

Bạn chỉ có thể đặt lệnh lỗi như lỗi ('nhập người dùng xấu') và nó sẽ dừng tập lệnh.

Chỉnh sửa: cách khác, bạn chỉ có thể cấu trúc lại mã của mình để không chạy trừ khi bạn đặt cờ đầu vào là đúng. Một cái gì đó như

inp = input('>', s) 

if validateInput(inp) 
    %do you stuff here or call your main function 
else 
    fprintf('Invalid input') 
end 
+0

Nếu có nhiều nơi một chức năng cần phải thoát ra, giải pháp này dẫn đến một cây chạy nó hay không phải là loại báo cáo. Không thực tế. – Argyll

13

Tôi không chắc chắn cách bạn xác định "thoát", nhưng error có vẻ là chức năng bạn cần.

y = input('Please input a non-negative number: '); 
if(y<0) 
    error('input must be non-negative'); 
end 

disp(sprintf('y=%f', y)); 
+0

Mặc dù hợp lệ và dễ dàng, việc sử dụng 'lỗi' với một đối số không phải là tốt nhất. Nó ngăn chặn những thứ như 'lasterror' hoạt động hoàn toàn. Ngoài ra, các ký tự đặc biệt như ''\ n'' trong đối số không được chuyển đổi. – horchler

+0

Tôi giả định rằng bạn đang đề xuất sử dụng tham số MSGID, mặc dù tôi không chắc chắn làm thế nào để thực sự trích xuất đó. Tôi lưu ý rằng ngay cả trong năm 2017a nó đòi hỏi các tham số này là mảng ký tự, không phải là chuỗi ... người đàn ông tôi ghét Matlab. – ensignr

7

Hey Tôi cho rằng bạn có thể sử dụng kết hợp cố gắng để xử lý lỗi hơi bất ngờ và làm điều gì đó.

Như một ví dụ,

function [ output ] = test(input) 

    Bmat = [ 1 1 1 ] % Some matrix 

    try 
    input*B; 
    catch ME 
    disp(ME.message) 
    return;   % This is the statement that exits your function 
    end 

end 

Nếu bạn chạy

>> test([1 1 1]) 

Nó sẽ không làm việc kể từ khi biến 'đầu vào' và 'B' có kích thước bên trong không hạnh phúc, nhưng 'thử' tuyên bố sẽ ném một ngoại lệ để 'bắt', và làm bất cứ điều gì bạn muốn từ đó. Trong trường hợp này, nó sẽ hiển thị một thông báo lỗi tại dòng lệnh và thoát khỏi hàm.

Biến 'ME' ở đây chỉ là đối tượng MATLAB để xử lý lỗi và ME.message lưu trữ một chuỗi chứa loại lỗi mà trình thông dịch bị phát hiện.

Tôi chỉ đọc câu hỏi của bạn một lần nữa ... Tôi cho rằng lệnh 'return' có thể là những gì bạn đang thực sự sau, bạn sẽ có thể sử dụng nó để thoát khỏi bất kỳ câu lệnh logic hoặc vòng lặp nào cũng như chức năng.

Bạn có thể đọc thêm về các lệnh 'return' và xử lý từ các tài liệu MATLAB lỗi,

http://www.mathworks.com/access/helpdesk/help/techdoc/ref/return.html

+0

'return' hoạt động ngoại trừ nếu có nhiều hơn một đầu ra, một thông báo lỗi sẽ nhắc. Chỉ cần thiết kế xấu từ Matlab tôi đoán. – Argyll

Các vấn đề liên quan