[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: capturing user input for program run in Emacs?
From: |
Tim X |
Subject: |
Re: capturing user input for program run in Emacs? |
Date: |
Wed, 08 Dec 2010 15:16:37 -0000 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux) |
patrol <patrol_boat@hotmail.com> writes:
> Hi,
>
> I ran a simple C program from within Emacs using the shell command
> (M-!). The program requires user input.
>
> Here's the program:
>
> #include <stdio.h>
>
> char firstInitial, middleInitial, lastInitial;
> int age;
>
> main()
> {
> printf("Input your three initials (first, middle, and last) and your
> age: ");
> scanf("%c%c%c%i", &firstInitial, &middleInitial, &lastInitial,
> &age);
> printf("\nGreetings %c.%c.%c. %s %i.\n",
> firstInitial, middleInitial, lastInitial,
> "Next year your age will be", age + 1);
> }
>
> And this is the output I get:
>
> Input your three initials (first, middle, and last) and your age: ^M
>
> Greetings ^@.^@.^@. Next year your age will be 1. ^M
>
> The program just outputs this and doesn't stop to give me a chance to
> input the information. I believe the ^M stands for RET, so it looks
> like Emacs is somehow automatically "feeding RET" to the program, I'm
> guessing??? And I have no idea what ^@ means.
>
> I also tried starting a separate subshell using M-x shell. It works
> "better", but still not right. When I activate the program by typing
> its filename (which is Initials), I don't see the user prompt (i.e.,
> "Input your three initials..."). It just reprints the file name like
> so:
>
> c:\cprograms>Initials
> Initials
>
> So then I do the input anyway (e.g., ABC30), press RET, then I get:
>
> Input your three initials (first, middle, and last) and your age:
> Greetings A.B.C. Next year your age will be 31.
>
> So, I guess it's kind of working, but the user input part is still
> messed up. Incidentally, the program works fine from the console
> (command) prompt, but I'd like to be able to run it from within Emacs,
> too. Can anyone tell me what the problem is?
>
This looks like a buffering issue to me.
Try ensuring you flush your output before attempting to read input.
Tim
--
tcross (at) rapttech dot com dot au