Query

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Harika
    New Member
    • Sep 2006
    • 19

    Query

    Dear sir/madam,
    This is Harika. I have a doubt about a function called getchar().
    Why it doesnot work after reading a string using scanf() function.

    For ex:

    printf("Enter the string");
    scanf("%s",a);
    b=getchar();
    putchar(b);


    I hope u would give me compatible solution.

    Thank you.
  • pukur123
    New Member
    • Sep 2006
    • 61

    #2
    When the second statement will be executed, we have to give the string followed by a return character(i.e., we have to press the Enter key). Whenever we are giving some input, it will pass through the buffer named "stdin". So the last character, i.e., return character get stored in this buffer. So when the third staement will be executed, it gets the return character from the stdin and get stored in the variable b and as the return key is required to terminate the getchar() function call, it does not ask you to input any thing else. Just print the value of b in integer form and check it will give you 13 (i.e., the ASCII code of return character.

    So whenever there is a requirement of reading character(s), it is required to flush the input buffer. So the correct way is as follows:

    printf("Enter the string");
    scanf("%s",a);
    fflush(stdin);
    b=getchar();
    putchar(b);

    Comment

    • Harika
      New Member
      • Sep 2006
      • 19

      #3
      Originally posted by pukur123
      When the second statement will be executed, we have to give the string followed by a return character(i.e., we have to press the Enter key). Whenever we are giving some input, it will pass through the buffer named "stdin". So the last character, i.e., return character get stored in this buffer. So when the third staement will be executed, it gets the return character from the stdin and get stored in the variable b and as the return key is required to terminate the getchar() function call, it does not ask you to input any thing else. Just print the value of b in integer form and check it will give you 13 (i.e., the ASCII code of return character.

      So whenever there is a requirement of reading character(s), it is required to flush the input buffer. So the correct way is as follows:

      printf("Enter the string");
      scanf("%s",a);
      fflush(stdin);
      b=getchar();
      putchar(b);
      Dear pukur,

      Thanks for ur reply. Iam so glad with ur reply. But iam getting segmentation fault which u sent the program. I have got that when we put getchar() functions twice concurently. It executes succesfully without putting any fflush. What do u say of it.

      for ex:

      #include<stdio. h>

      main()
      {

      char b,a[10];
      printf("\n Enter");
      scanf("%s",a);
      printf("Enter the char to count:");
      getchar();
      b=getchar();
      putchar(b);

      }

      Why do i get segmentation fault even when we put fflush function.
      I hope u would give me quick reply.
      Thank you.

      Comment

      • pukur123
        New Member
        • Sep 2006
        • 61

        #4
        The segmentation fault is might be due to the string you are giving as input exceeds the length of the array.

        See if you declare an array of 10 characters, then the length of the input string should vary between 1 and 9. Because the string should terminate with a null character and it also get stored in the array you declared.

        Comment

        • Harika
          New Member
          • Sep 2006
          • 19

          #5
          Originally posted by pukur123
          The segmentation fault is might be due to the string you are giving as input exceeds the length of the array.

          See if you declare an array of 10 characters, then the length of the input string should vary between 1 and 9. Because the string should terminate with a null character and it also get stored in the array you declared.


          Good evening sir,

          Actually i have taken sufficient memory to store the string.

          consider the below example as u told,

          ~
          #include<stdio. h>

          main()
          {

          char b,a[10];
          printf("\n Enter");
          scanf("%s",a);
          printf("Enter the char :");
          fflush(stdin);
          b=getchar();
          putchar(b);
          }

          Actually its not reading char. Without reading its skipping from the program.

          By putting getchar() function twice concurrently shown below its reading the char and executing succesfully. What do u say of it.

          #include<stdio. h>

          main()
          {

          char b,a[10];
          printf("\n Enter");
          scanf("%s",a);
          printf("Enter the char to count:");
          b=getchar();
          b=getchar();
          putchar(b);
          }


          thank you.

          Comment

          • Harika
            New Member
            • Sep 2006
            • 19

            #6
            Originally posted by pukur123
            When the second statement will be executed, we have to give the string followed by a return character(i.e., we have to press the Enter key). Whenever we are giving some input, it will pass through the buffer named "stdin". So the last character, i.e., return character get stored in this buffer. So when the third staement will be executed, it gets the return character from the stdin and get stored in the variable b and as the return key is required to terminate the getchar() function call, it does not ask you to input any thing else. Just print the value of b in integer form and check it will give you 13 (i.e., the ASCII code of return character.

            So whenever there is a requirement of reading character(s), it is required to flush the input buffer. So the correct way is as follows:

            printf("Enter the string");
            scanf("%s",a);
            fflush(stdin);
            b=getchar();
            putchar(b);


            Dear sir,

            This is Harika. Thank you sir with your compatible reply i have solved my problem with putting new line character in scanf() function is shown below.

            #include<stdio. h>

            main()
            {

            char b,a[10];
            printf("\n Enter");
            scanf("%s \n",a);
            fflush(stdin);
            b=getchar();
            putchar(b);

            }

            Iam so glad with your response. Thank you.

            Comment

            • koder
              New Member
              • Sep 2006
              • 23

              #7
              Originally posted by pukur123
              When the second statement will be executed, we have to give the string followed by a return character(i.e., we have to press the Enter key). Whenever we are giving some input, it will pass through the buffer named "stdin". So the last character, i.e., return character get stored in this buffer. So when the third staement will be executed, it gets the return character from the stdin and get stored in the variable b and as the return key is required to terminate the getchar() function call, it does not ask you to input any thing else. Just print the value of b in integer form and check it will give you 13 (i.e., the ASCII code of return character.

              So whenever there is a requirement of reading character(s), it is required to flush the input buffer. So the correct way is as follows:

              printf("Enter the string");
              scanf("%s",a);
              fflush(stdin);
              b=getchar();
              putchar(b);
              "for the below given program
              #include<stdio. h>
              #include<string .h>


              int main()
              {
              char b,a;
              printf("Enter the string");
              scanf("%c",&a);
              b=getchar();
              putchar(b);
              printf("\n%d",b );
              return 0;
              }

              if i input some character like "out"
              the out put will be "u" and the decimal 117.I understand that teh program is taking the second character of what ever i give as input and printing the character as well it's ascii value too.My question is how this program is taking the second character particularly when i give a string of characters?also if i give a single character input it throws NO character output but rather a decimal output of 10.
              my explanation to this is

              "when give a single character input"
              The scanf will read what ever from the stdin buffer except the new line feed(LF)
              When the getchar peeps to stdin buffer for any input it sees no input except LINE FEED and prints it's decimal value

              "when give a string as input"
              when gives a string as input , the scanf,with a "%c" as format specifier will read the first character and goes away.when the getchar comes ,for his turn,he will get the second character,Thus he prints the second character and his decimal ASCII value.
              Please correct me,if i am wrong
              regards

              Comment

              • nikhilraj
                New Member
                • Sep 2006
                • 11

                #8
                Originally posted by Harika
                Good evening sir,

                Actually i have taken sufficient memory to store the string.

                consider the below example as u told,

                ~
                #include<stdio. h>

                main()
                {

                char b,a[10];
                printf("\n Enter");
                scanf("%s",a);
                printf("Enter the char :");
                fflush(stdin);
                b=getchar();
                putchar(b);
                }

                Actually its not reading char. Without reading its skipping from the program.

                By putting getchar() function twice concurrently shown below its reading the char and executing succesfully. What do u say of it.

                #include<stdio. h>

                main()
                {

                char b,a[10];
                printf("\n Enter");
                scanf("%s",a);
                printf("Enter the char to count:");
                b=getchar();
                b=getchar();
                putchar(b);
                }


                thank you.
                hey the program which you have written with single
                getchar() worked fine I used your second program and the second program it accepted the first char and when enter (return ) key is pressed it accepts that value .

                Comment

                • askpragnesh
                  New Member
                  • Sep 2006
                  • 3

                  #9
                  Originally posted by Harika
                  Dear sir/madam,
                  This is Harika. I have a doubt about a function called getchar().
                  Why it doesnot work after reading a string using scanf() function.

                  For ex:

                  printf("Enter the string");
                  scanf("%s",a);
                  b=getchar();
                  putchar(b);


                  I hope u would give me compatible solution.

                  Thank you.
                  getchar works with only char datatype, not more than a character (string) so it fails.
                  pragnesh

                  Comment

                  Working...