2017-01-25 14 views
0

Что происходит с моей функцией переключения? это выглядит как этотЧто происходит с моей функцией переключения?

void ss(int argc, char *argv[]) 
{ 
    int side_length = 200; 
    double red = 0.0; 
    double green = 0.0; 
    double blue = 0.0; 

    for (int i = 1; i <= argc; i++) { 
    printf("%s\n", argv[i]); 
    if (*argv[i] == '-'){ 
     switch (*++argv[i]) { 
     case 'r': 
      red = sin(0.2*atof(argv[i++])); 
      printf("argv: %f\n", sin(0.2*atof(argv[i++]))); 
      printf("red: %f\n", red); 
      break; 
     } 
    } 
    } 
} 

я планирую добавить больше случаев переключения позже, но сейчас я сосредоточен на красный, так что я могу просто повторить его. Похоже, проблема в том, что она просто не сохраняет значение, которое я хочу, чтобы оно было красным, оно возвращает значение в другой инструкции printf просто отлично.

Редактирование: С тех пор я использовал оба для (int i = 1; i < argc; i ++) и для (int i = 1; argv [i]! = '\ 0'; i ++) и ни один из них не работал. Все еще ищут ответ.

+2

Похож у вас есть слишком много Преинкремента и пост-инкремент операторов. – user3386109

+0

@ user3386109 Можете ли вы уточнить? Извините, я новичок в C. – jazaniac

+2

У вашего кода есть несколько проблем. On is, что ваш цикл for работает до далекого ... 'for (int i = 1; i <= argc; i ++)' должно быть 'for (int i = 1; i cwschmidt

ответ

0

Из-за того, что слишком много i++ операций, ваша программа вызывает неопределенное поведение, так как вы получаете доступ к argv массив из границ.

После этого вы ничего не можете сказать о поведении программы. Даже разрешено удалять все ваши файлы.

+0

Хорошо, понял. С тех пор я обновил цикл for для 'for (i = 1; i jazaniac

1

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

вспыхнуть дополнительный прирост только тогда, когда это необходимо:

for (int i = 1; i < argc; i++) { 
    printf("%s\n", argv[i]); 
    if (argv[i][0] == '-'){  // check the first char of the current arg 
     switch (argv[i][1]) {  // check the second char of the current arg 
     case 'r': 
      red = sin(0.2*atof(argv[i+1])); // grab the value from the next arg 
      printf("argv: %f\n", sin(0.2*atof(argv[i+1]))); // grab the next arg again 
      printf("red: %f\n", red); 
      i++;     // do an extra increment at the end since we processed 2 args 
      break; 
     } 
    } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^