Проверка элементов в массиве с помощью цикла for, чтобы убедиться, что они имеют правильный тип данных, но ответ печатается слишком много раз - PullRequest
0 голосов
/ 27 марта 2019

В настоящее время я пытаюсь перебрать массив argv для проверки отдельных элементов.Цикл работает правильно, однако функция printf печатает слишком много раз (пропорционально количеству элементов, предоставляемых пользователем в командной строке).Мне было интересно, может ли кто-нибудь помочь мне перебрать отдельные элементы массива, печатая ответ только один раз.

if(argc == 2)
{
    //when the ith position of the first index of argv does not equal null move across to the next ith value 

    int key = atoi(argv[1]);       
    for(int i = 0; argv[1][i] != '\0'; i++)
    {
        //check each character at the command line is a decimal digit

       int currentchar = argv[1][i];
       if (isdigit(currentchar))
       {
           printf("success\n");
           printf("%i\n", key);
       }
       else
       {
           printf("Usage: ./caesar key\n");
           return 1;    
       }

1 Ответ

1 голос
/ 28 марта 2019

следующий предложенный код:

  1. безупречная компиляция
  2. выполняет желаемую функциональность
  3. содержит хороший метод для отображения сообщения об ошибке «USAGE»

и теперь предложенный код:

#include <stdio.h>  // fprintf(), printf()
#include <stdlib.h> // exit(), EXIT_FAILURE
#include <ctype.h>  // isdigit()

int main( int argc, char *argv[] )
{
    if(argc != 2)
    {
        fprintf( stderr, "USAGE: %s <saesar key>\n", argv[0] );
        exit( EXIT_FAILURE );
    }

    int validKey = 1;  // indicate valid key

    for(int i = 0; argv[1][i]; i++)
    {
        //check each character at the command line is a decimal digit
        if ( !isdigit( argv[1][i] ) )
        {
            validKey = 0;   // indicate invalid key
        }
    }

    if( validKey )
    {
        printf("success\n");
        printf("%i\n", atoi(argv[1]) );
    }

    else
    { // invalid key
        printf( "key: %s is invalid\n", argv[1] );
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...