C Input and Output

Question 1
Predict the output of following program?
#include "stdio.h"
int main()
{
    char arr[100];
    printf("%d", scanf("%s", arr));
    /* Suppose that input value given
        for above scanf is "GeeksQuiz" */
    return 1;
}
Cross
9
Tick
1
Cross
10
Cross
100


Question 1-Explanation: 
In C, scanf returns the no. of inputs it has successfully read. See http://geeksforgeeks.org/archives/674
Question 2

Predict output of the following program 

C

#include <stdio.h>
int main()
{
   printf("new_c_questionbr");
   printf("geeksforgeeks"); 
   getchar();
   return 0;
}
Cross

ew_c_question
geeksforgeeks
 

Cross

new_c_ques
geeksforgeeks
 

Cross


geeksforgeeks
 

Tick

Depends on terminal configuration



Question 3
#include <stdio.h>

int main() 
{ 
  printf(" \"GEEKS %% FOR %% GEEKS\""); 
  getchar(); 
  return 0; 
}
Tick
“GEEKS % FOR % GEEKS”
Cross
GEEKS % FOR % GEEKS
Cross
\\\"GEEKS %% FOR %% GEEKS\\\"
Cross
GEEKS %% FOR %% GEEKS


Question 3-Explanation: 
Backslash (\\\\\\\\) works as escape character for double quote (“). For explanation of %%, see http://www.geeksforgeeks.org/how-to-print-using-printf/
Question 4

C

#include <stdio.h>
// Assume base address of "GeeksQuiz" to be 1000
int main()
{
   printf(5 + "GeeksQuiz");
   return 0;
}
Cross

GeeksQuiz
 

Tick

Quiz
 

Cross

1005
 

Cross

Compile-time error
 



Question 4-Explanation: 

printf is a library function defined under stdio.h header file. The compiler adds 5 to the base address of the string through the expression 5 + \"GeeksQuiz\" . Then the string \"Quiz\" gets passed to the standard library function as an argument.

Question 5

Predict the output of the below program:

C

#include <stdio.h>

int main()
{
    printf("%c ", 5["GeeksQuiz"]);
    return 0;
}
Cross

Compile-time error

Cross

Runtime error

Tick

Q

Cross

s



Question 5-Explanation: 

The crux of the program lies in the expression: 5[\"GeeksQuiz\"] This expression is broken down by the compiler as: *(5 + \"GeeksQuiz\"). Adding 5 to the base address of the string increments the pointer(lets say a pointer was pointing to the start(G) of the string initially) to point to Q. Applying value-of operator gives the character at the location pointed to by the pointer i.e. Q.

Question 6
Predict the output of below program:
#include <stdio.h>
int main()
{
    printf("%c ", "GeeksQuiz"[5]);
    return 0;
}
Cross
Compile-time error
Cross
Runtime error
Tick
Q
Cross
s


Question 6-Explanation: 
The crux of the program lies in the expression: \"GeeksQuiz\"[5]. This expression is broken down by the compiler as: *(“GeeksQuiz” + 5). Adding 5 to the base address of the string increments the pointer(lets say a pointer was pointing to the start(G) of the string initially) to point to Q. Applying value-of operator gives the character at the location pointed to by the pointer i.e. Q.
Question 7

When a copy constructor may be called?

Cross
When an object of the class is returned by value.
Cross
When an object of the class is passed (to a function) by value as an argument.
Cross
When an object is constructed based on another object of the same class
Cross
When compiler generates a temporary object.
Tick
All of the above


Question 7-Explanation: 

All the given options are correct as copy constructor can be called in any of the situation.

Question 8
Which of the following is true
Cross
gets() can read a string with newline characters but a normal scanf() with %s can not.
Tick
gets() can read a string with spaces but a normal scanf() with %s can not.
Cross
gets() can always replace scanf() without any additional code.
Cross
None of the above


Question 8-Explanation: 
gets() can read a string with spaces but a normal scanf() with %s can not. Consider following program as an example. If we enter \"Geeks Quiz\" as input in below program, the program prints \"Geeks\" But in the following program, if we enter \"Geeks Quiz\", it prints \"Geeks Quiz\"
Question 9

Which of the following is true?
 

Tick

gets() doesn\'t do any array bound testing and should not be used. 
 

Cross

fgets() should be used in place of gets() only for files, otherwise gets() is fine
 

Cross

gets() cannot read strings with spaces
 

Cross

None of the above
 



Question 9-Explanation: 

Use of gets() generates the risk of an overflow of the allocated buffer. This happens because the function gets(), doesn\'t know the size of the buffer, and continues reading until it finds a newline \"\\n\" or encounters EOF, and so it may overflow the bounds of the buffer it was given. 

See gets() is risky to use!
 

Question 10

What does the following C statement mean? 
 

C

 scanf("%4s", str);
Cross

Read exactly 4 characters from console.
 

Tick

Read maximum 4 characters from console.
 

Cross

Read a string str in multiples of 4
 

Cross

Nothing
 



Question 10-Explanation: 

Try following program, enter GeeksQuiz, the output would be \"Geek\" 
 

#include <stdio.h>

int main()
{
    char str[50] = {0};
    scanf(\"%4s\", str);
    printf(str);
    getchar();
    return 0;
}


 

There are 37 questions to complete.


  • Last Updated : 28 Sep, 2023

Share your thoughts in the comments
Similar Reads