ues while loop can't printf use C language [duplicate] - c

This question already has answers here:
Why does printf not flush after the call unless a newline is in the format string?
(10 answers)
Closed 3 years ago.
In ubuntu,My code is:
int main(){
printf("signal test");
while(1);
return 0;
}
and it can'd display: signal test

This is because of buffering, as no newline is printed, nothing is flushed to the output.

Related

No need of fflush(stdout) with printf in C? [duplicate]

This question already has answers here:
What are the rules of automatic stdout buffer flushing in C?
(5 answers)
printf flush at program exit
(4 answers)
Closed 3 years ago.
Until now, I used fflush(stdout) when using printf without \n, since we have to flush the buffer.
But I found that the below code also works fine.
#include <stdio.h>
int main(void){
printf("hello world");
// without fflush(stdout)
}
// output: "hello world"
Is the outcome differs with the compiler? or am I misunderstand something?

fgets will be ignored probably due to other scanf's [duplicate]

This question already has answers here:
Why scanf("%d", [...]) does not consume '\n'? while scanf("%c") does?
(4 answers)
scanf() leaves the newline character in the buffer
(7 answers)
Closed 6 years ago.
The program won't compile fgets in the teste1 function. Or at least it isn't working properly, it won't let me type the string, the program will end right after it prints "Nome do cliente".
If I disable the other scanf's in the function, it will run without any issue.
How do I make fgets to work?
#include <stdio.h>
void teste1(){
char teste[50];
printf("Nome do cliente\n");
fgets(teste,50,stdin);
}
void teste2(){
teste1();
}
void teste3(){
int opc1,opc2;
printf("\nSeleccione a área desejada\n1- Clientes\n2- Concessionários\n3- Carros de demonstração\n");
scanf("%d",&opc1);
printf("\nSeleccione a área desejada\n1- Inserir\n2- Alterar\n3- Remover\n4- Consultar\n");
scanf("%d",&opc2);
teste2();
}
int main()
{
teste3();
}
The Enter key you pressed for the last scanf input will be left in the input buffer as a newline. The fgets function will read this newline and think it is finished.

C function fork() [duplicate]

This question already has answers here:
printf anomaly after "fork()"
(3 answers)
Closed 6 years ago.
i wanted to find someone that can explain this to me. I have this program:
int main(int argc, char *argv[]){
printf("P ");
if(fork()==0)
printf("C ");
return 0;
}
The result of this program is: P P C
What's the reason for that second "P" ?
IO buffering is the reason. printf is not printing the text right away, but waiting for newline, fflush or the end of the program to actually print it. But the buffer for the "future-to-print" text is in the memory that is getting duplicated by fork, so both processes receive it. And in the end both are printing it.

Code before while(1) does not run [duplicate]

This question already has answers here:
printf not printing to screen
(3 answers)
Why does printf not flush after the call unless a newline is in the format string?
(10 answers)
Closed 7 years ago.
I have code like this below:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("hello");
while(1){
// whatever here
}
}
and the question is: why the first instruction is skipped? It runs only the loop, hello is never printed. I compiled it with gcc and g++ with the same result.
It does run, it's just that the output buffer is not flushed before your while.
Use printf("hello\n"); instead. The newline character will flush the buffer so writing the output immediately to your console.
Your assumption is wrong, your code does run, only stdout is not flushed, but buffered.
Use fflush(stdout) after printf("hello"), this forces stdout to be printed.
And, as #Bathsheba pointed out, also a newline character ("\n") within the printf forces it to flush, which is explained in this SO question.

printf("-") and printf("-\n"); [duplicate]

This question already has answers here:
printf anomaly after "fork()"
(3 answers)
fork() in c using printf [duplicate]
(2 answers)
Closed 8 years ago.
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int i;
for (i = 0; i < 2; i++) {
fork();
printf("-");
}
return 0;
}
The result of this program is 8"-" : "--------". But if I change 'printf("-");' into 'printf("-\n");', the result of this program will become 6"-": "-\n-\n-\n-\n-\n-\n". Can anyone tell me why?
printf writes to stdout stream which is line buffered. Buffer is a block of memory which belongs to a stream and is used to hold stream data temporarily. This is done to increase efficiency, as file and console I/O is slow in comparison to memory operations. Line buffered means that characters are saved up in the buffer only till a newline is output.

Resources