Как проверить, является ли аргумент argv числом и ничем иным с помощью sscanf? - PullRequest
0 голосов
/ 06 ноября 2018

Я должен использовать sscanf или scanf.

if (sscanf(argv[x],"%d", &numb) == 1) {
       do smt 
  };

Моя проблема - это случай, когда аргумент похож на 10xyz. В этом случае я всегда получаю EOF и программа немедленно останавливается. Но я не хочу, чтобы программа прекратила что-либо еще.

xyz10 или 10xyz или 10x10, конечно, не должно быть числом, но я не хочу, чтобы моя программа остановилась из-за этих аргументов. Так, как я могу проверить, является ли аргумент числом с sscanf без EOF, в то время как аргумент может быть любой комбинацией любых символов?

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете выполнить цикл через аргументы и указать, является ли каждый аргумент целым числом, выполнив это.

#include<stdio.h>
int main(int argc, char *argv[]) {
    int num,dummy;
    for (int i=argc-1;i;i--){
        if (sscanf(argv[i], "%d%c", &num, &dummy) == 1) {
            printf("Got a integer -> %d\n",num);
        } else {
         printf("Got garble\n");
        }
    }
 return 0;
}  

Ввод, как это -> 10 20 10dje 60

Создает вывод как это ->

получил целое число -> 60

Получил мусор

получил целое число -> 20

получил целое число -> 10

...