2015-12-15 3 views
-1
 write(sd, "\nWelcome!\n", 51); 
     write(sd, "Please enter one of the following options:\n\n", 45); 
     write(sd, "1 - Do this\n", 28); 
     write(sd, "2 - Do that\n", 26); 
     write(sd, "3 - Do the other\n", 27); 
     fflush(stdout); 

     recv(sd, &choice, 1, 0); 

     switch (choice) { 
     case 49: 
     fp = popen("/bin/df", "r"); 
     if (fp == NULL) { 
      printf("Failed to run command\n"); 
      exit(1); 
     } 
     while (fgets(path, sizeof(path), fp) != NULL) { 
      sgnet_writes(sd, path); 

     } 
     break; 
     default: 
     write(sd, "Invalid choice!\n", 17); 
     break; 

Так что, когда я печатаю 49, я получаю сообщение о недопустимом выборе. Любая идея как или, по крайней мере, как добраться до раздела DO SOME STUFF?C - выбор не был выбран

Если я ввожу любое число, начинающееся с 1, оно выбирает первый вариант, любое число, начинающееся с 2, второе, любое число, начинающееся с 3, его третий вариант. Любое число, начиная с 4 или выше, он не

Благодаря

+0

Что такое 'choice'? – immibis

+0

Положительный. Если я набираю 1, 101, 11111, 1111111111111111111111, тогда происходит «Делать это». Если я делаю номер, начинающийся с 2, то его «Сделайте это» ... simialrly для 3 – pee2pee

+0

Прохладный рассказ. Что такое «выбор»? – immibis

ответ

2

Всегда помните break для каждого case из switch заявления:

case 49: 
{ 
    DO SOME STUFF; 
} 
break; 
+0

Хорошо спасибо, любые предложения к проблеме? – pee2pee

+0

, потому что у вас нет 'break', поэтому он идет прямо к' default', который не то, что вы хотите. – artm

+0

Я добавил, но ничего не изменилось – pee2pee

0

Как ARTM сказал, просто добавить перерыв:

write(sd, "\nWelcome!\n", 51); 
    write(sd, "Please enter one of the following options:\n\n", 45); 
    write(sd, "1 - Do this\n", 28); 
    write(sd, "2 - Do that\n", 26); 
    write(sd, "3 - Do the other\n", 27); 
    fflush(stdout); 

    recv(sd, &choice, 1, 0); 

    switch (choice) { 
    case 49: 
     DO SOME STUFF 
     break; 
    default: 
    write(sd, "Invalid choice!\n", 17); 
    break; 
+0

Измененный исходный код, и у меня есть это - просто не хотелось вводить то, что я думал в то время, чувствительный – pee2pee

+0

выбор - это int int? – Slepz

+0

Правильно да – pee2pee

0

choice является переменной типа int. Значение int составляет 4 или 8 байтов на наиболее распространенных платформах. read 1 байт в int может дать непредсказуемые результаты, поэтому вы не должны этого делать.

Кроме того, символ «1» отличается от номера 1. Фактически символ «1» имеет значение 49 (опять же, на наиболее распространенных платформах). И read читает символы, а не цифры - если вы наберете 1, первый байт, который он прочитает, будет иметь значение 49.

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