我正在使用以下代碼,并嘗試檢查命令列引數值。如果用戶輸入了錯誤的值,它將列印一條錯誤訊息并退出程式。但是,這種方法對我不起作用,而且我是 C 編程的新手。有沒有另一種方法來實作這一目標?
int main(int argc, char *argv[])
{
int a;
int b;
int c;
if(argc != 4)
{
printf("Invalid usage of the file);
exit(0);
}
if ( ((atoi(argv[3])) != 1 || (atoi(argv[3]))) != 0 && (atoi(argv[1])) < 0 && (atoi(argv[2])) < 0 ) {
printf("Invalid arguments\n");
exit(0);
}
a = atoi(argv[1]);
b = atoi(argv[2]);
c = atoi(argv[3]);
}
當我運行檔案時,我期望用戶只能為 argv[1] 和 argv[2] 輸入正數,而對于 argv[3] 他只能輸入 0 或 1。例如:
./filename 5 5 1
uj5u.com熱心網友回復:
您的代碼過于復雜,條件錯誤。
你要這個:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
if (argc != 4) // check argument count
{
fprintf(stderr, "Invalid usage of the file"); // rather print to stderr
exit(1); // use exit(1) in case of error
}
// retrieve arguments
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int c = atoi(argv[3]);
// check validity of arguments
if (a < 0 || b < 0 || (c != 0 && c != 1)) {
fprintf(stderr, "Invalid arguments\n"); // rather print to stderr
exit(1); // use exit(1) in case of error
}
}
周圍的括號(c != 0 && c != 1)是多余的,只是為了更好的可紅性。
(a < 0 || b < 0 || (c != 0 && c != 1)通俗地說:
a 小于 0 或 b 小于零或 c 不同于 0 且不同于 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324786.html
標籤:C
上一篇:C中的雙陣列
下一篇:單次使用后在宏內部取消定義常量
