何が問題なのかまったくわかりません。ループを 1 回繰り返した直後に終了する while ループ (コード ブロック 1) があります。switch ステートメント全体をコメントアウトしたので、printf(...)
andだけがscanf(...)
残り、ループが終了したように見えます。
ループ:
int main(int argc, char *argv[]) {
if(argc != 2) {
printf("Usage requires hostname\n");
return 1;
}
TCPClient client;
char str[1];
unsigned char buf[BUFLEN];
bool run = true;
printf("The commands in use are:\n"
"h - help\n"
"r - read ENCs (incremental)\n"
"x - exit\n");
while(run) {
printf("Enter a command: ");
scanf("%s", str);
switch(str[0]) {
case 'h':
printf("The commands in use are:\n"
"h - help\n"
"r - read ENCs (incremental)\n"
"x - exit\n");
break;
case 'r':
client.recvData(argv[1], buf, BUFLEN);
for(int i = 0; i < BUFLEN / 4; i++) {
if(i % 3 == 0)
printf("\n");
printf("Encoder %d: %d\t", i, (int)((((buf[4 * i] << 24) | (buf[4 * i + 1] << 16)) | (buf[4 * i + 2] << 8)) | (buf[4 * i + 3])));
}
printf("\n");
break;
case 'x':
run = false;
break;
default:
printf("Unrecognized command\n");
break;
}
}
return 0;
}
ある時点で、私は追加しました
if(run)
printf("run = true");
while ループの後、コントロール bool ( run
) が false であるためにループが壊れているかどうかを確認します。結果は何も出力されませんでした。これは、どういうわけかrun
false になったことを示しています。これは、入力が何であれ、または switch ステートメントがなくなった場合でも発生します。この場合、何もrun
false になるべきではありません。
本当に奇妙なのは、別のファイルに、実際に機能することを除いて、同様のループがあることです。
void *control(void *arg) {
DAC dac(5);
char str[1];
int chan = -1;
uint16_t code = -1;
while(run) {
printf("Enter a command: ");
scanf("%s", str);
switch(str[0]) {
case 'h':
printf("The commands in use are:\n"
"h - help\n"
"s - set DACs\n"
"r - read ENCs (incremental)\n"
"t - read ENCs (cumulative)\n"
"q - Toggle the quadrature waveform\n"
"x - exit\n");
break;
case 's':
chan = code = -1;
printf("Enter the DAC channel: ");
scanf("%d", &chan);
printf("Enter the value: ");
scanf("%hu", &code);
pthread_mutex_lock(&lock);
dac.setDAC(chan, code);
pthread_mutex_unlock(&lock);
break;
case 'r':
pthread_mutex_lock(&lock);
for(int i = 0; i < BUFLEN; i++) {
if(i % 3 == 0)
printf("\n");
printf("Encoder %d: %d\t", i, incBuf[i]);
incBuf[i] = 0;
}
printf("\n");
pthread_mutex_unlock(&lock);
break;
case 't':
pthread_mutex_lock(&lock);
for(int i = 0; i < BUFLEN; i++) {
if(i % 3 == 0)
printf("\n");
printf("Encoder %d: %ld\t", i, cumBuf[i]);
}
printf("\n");
pthread_mutex_unlock(&lock);
break;
case 'q':
runSignal = !runSignal;
if(runSignal)
printf("Quadrature waveform enabled\n");
else
printf("Quadrature waveform disabled\n");
break;
case 'x':
run = false;
break;
default:
printf("Unrecognized command\n");
break;
}
}
dac.reset();
pthread_exit(NULL);
}
私は何が起こっているのかかなり迷っています...