Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

ANS-C: Stanna och vänta på tangettryck

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1

Jag vill att programmet ska stanna och vänta på att jag trycker på vilken tangent som helst innan den går vidare.
alltså inte scanf eller getchar. Finns det något annat som passar?

  • Medlem
  • Mölndal
  • 2004-10-20 12:26

Jag tror inte att det går i ANSI-C. Om det är ok att trycka Enter så kan du ju använda getchar().

I Carbon/Cocoa går det ju naturligtvis att lösa, men då är det inte ANSI-C längre.

Fast förresten... det måste ju gå! Många UNIX-program, t ex "more" läser ju enstaka tangenter utan följande enter?

  • Oregistrerad
  • 2004-10-20 12:29

Kommer inte ihåg hur det var längre men titta på getc eller getchar eller nåt liknande.

funktionen getch() returnerar tangenten aschi-koden för den nedtryckta tangenten utan att Enter trycks ned och den borde passa ypperligt för ändamålet. Kommer inte ihåg vilken header fil du behöver inkludera men jag skulle gissa på conio.h

  • Medlem
  • Stockholm
  • 2004-10-21 11:55
Ursprungligen av niqlas:

funktionen getch() [...] Kommer inte ihåg vilken header fil du behöver inkludera men jag skulle gissa på conio.h

stdio.h fungerar bra

[edit]jag syftade till getc(), har ingen aning om getch()[/edit]

Senast redigerat 2004-10-23 15:49

Denna lilla kodsnutt har jag vid slutet av en anropad funktion.
Jag vill att koden stannar där innen den går tillbaka till main.

printf("\nTryck på retur för att fortsätta.\n");
fflush(stdin);
while( (ch=getchar() ) !='\n');

Men detta skiter programmet högaktningsfullt i. Hur kommer det sig?

  • Medlem
  • Härnösand
  • 2004-10-24 00:53
Ursprungligen av Mattias Hedman:

Denna lilla kodsnutt har jag vid slutet av en anropad funktion.
Jag vill att koden stannar där innen den går tillbaka till main.

printf("\nTryck på retur för att fortsätta.\n");
fflush(stdin);
while( (ch=getchar() ) !='\n');

Men detta skiter programmet högaktningsfullt i. Hur kommer det sig?

Prova:

printf("\nTryck på retur för att fortsätta.\n");
do
{ 
    fflush(stdin); /* Behövs detta? */
}while(getchar() !='\n'); 
/* ch=getchar() är onödig, jag vet inte vad ch "är" i detta fallet. */

Fasen fick köra igång CodeWarrior, det var länge sedan.

  • Medlem
  • Stockholm
  • 2004-10-24 09:49

Kör du OS9 fortfarande?
Kör du OSX så ser jag inte syftet med CodeWarrior för c-programmering

  • Medlem
  • Härnösand
  • 2004-10-27 19:42
Ursprungligen av ivar:

Kör du OS9 fortfarande?
Kör du OSX så ser jag inte syftet med CodeWarrior för c-programmering

Jag kör OS X. Jag har inte lekt så mycket med XCode så jag kan det inte så bra.

Codewarrior version 9 kan köras i OS X.

här har vi lite kod igen då...

printf("\nGör ditt nästa val från menyn.\n");
	fflush(stdin);
	do
	{ 
		printf("hej\n");
	}while(getchar() !='\n');

Det ända som händer i slutet av funktionen är att hej skrivs ut sedan avslutas programmet.
Executable “inandout” has exited with status 208.

  • Medlem
  • 2004-10-24 17:29

fflush() är inte definierad för in-strömmar i ANSI-C. Så den raden ska du nog ta bort. Anledningen till att ditt program inte stannar tror jag är pga att du gjort en tidigare inläsning på något annat sätt och att det på så sätt hamnat ett oläst line feed tecken i buffern. Kontrollera med debugger eller kan du läsa in ditt tecken till en variabel som du gjorde tidigare och printa ut den för att verifiera.

char c = 0;
...
printf("\nGör ditt nästa val från menyn.\n");
c = getchar();
printf("Dec ascii value is: %d", c);

Om värdet är 10 oavsett vad du matar in så har du ovanstående problem.

  • Oregistrerad
  • 2004-10-28 09:01

while(!getch());

Borde iaf vänta tills getch returnerar något. Men som sagts tidigare, kan vara så att du har något i bufferten sen tidigare.

1
Bevaka tråden