简体   繁体   中英

Don't print the last character: print only after the next input

I have a problem, when I try to print an input, the program doesn't print the last string (in this case var_quantita ).

But if I add an \n , or if I send another command from stdin , it works.

So I think that the problem is related to the last string, but I'm not sure.

My code:

uint32_t var_quantita;
uint8_t var_tipo[BUF_SIZE];
//...
memset(com_par, 0, BUF_SIZE);
memset(comando, 0, BUF_SIZE);
memset(arg2, 0, BUF_SIZE);
memset(arg3, 0, BUF_SIZE);
memset(arg4, 0, BUF_SIZE);

//prendo in ingresso il comando e i parametri
fgets(com_par, BUF_SIZE, stdin);

sscanf(com_par, "%s %s %s %s", comando, arg2, arg3, arg4);
printf("Argomenti inviati:%s %s %s %s \n", comando, arg2, arg3, arg4);

//......

if(strcmp(comando, "add\0") == 0){

    strcpy(var_tipo, arg2);
    var_quantita = atoi(arg3);
    printf("Tipo:%s\nQuantita:%d", var_tipo, var_quantita); 


}//fine if(add)

The buffering of your system is set to be line buffered, characters are transmitted from the buffer as a block when a new-line character is encountered. Using \n is perfectly valid, but it has the side effect of also printing a newline, there are other options, namely:

  • Using fflush(stdout) after the printf will flush the buffer regarless, you won't need \n .

  • You can change your buffering mode to have no buffering, each output is written as soon as possible. Again, no \n will be needed.

     setvbuf(stdout, NULL, _IONBF, 0);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM