1a program i C, problem|Programmering / Grafisk formgivning|Forum|Nordichardware

Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
The forums are currently locked and only available for read only access
sp_Feed sp_TopicIcon
1a program i C, problem
jeremy1984
Kommer du hit ofta?
Medlem
Forum Posts: 315
Member Since:
June 26, 2002
sp_UserOfflineSmall Offline
1
November 14, 2005 - 8:16 pm
sp_Permalink sp_Print

#include
int check_if_y(char answer){
if(answer == 'y')
return 1;
else
return 0;
}

int main()
{
char answer;
while(1){
printf("Enter y/nn");
scanf("%c", &answer);
if(check_if_y(answer))
printf("Yesn");
else
printf("Non");
}
return 0;
}

Det här lilla meningslösa programmet ska skriva ut "yes" om man matar in 'y' och No annars.. men det fungerar inte som det ska.. Kan nån förklara varför?

/Nybörjare :blink: (kan dock java o assembler :bok: )

beirut_nisse
Siktar mot toppen
Medlem
Forum Posts: 75
Member Since:
February 28, 2004
sp_UserOfflineSmall Offline
977796
November 14, 2005 - 8:58 pm
sp_Permalink sp_Print

jeremy1984 wrote:
#include
int check_if_y(char answer){
if(answer == 'y')
return 1;
else
return 0;
}

int main()
{
char answer;
while(1){
printf("Enter y/nn");
scanf("%c", &answer);
if(check_if_y(answer))
printf("Yesn");
else
printf("Non");
}
return 0;
}

Det här lilla meningslösa programmet ska skriva ut "yes" om man matar in 'y' och No annars.. men det fungerar inte som det ska.. Kan nån förklara varför?

Jag skulle skriva om din kod helt och hållet.
******************************************
#include
#include

int loop=1;
char answer;

int main()
{
while(loop == 1)
{
printf("nPress q to quit n");
printf("Enter y/n n");
cin >> answer;
if(answer == 'y')
{
printf("nYes n");
}
else if(answer == 'n')
{
printf("nNo n");
}
else if(answer == 'q')
loop=0;
}
return 0;
}

Detta program skriver ut Yes om man skriver in y och No om man skriver in n. för att avsluta programmet trycker man q(vilket jag har förklarat högst upp när det startas)
Jag var dock tvungen att lägga till ett ytterliggare bibliotek som du ser(iostream.h)

jeremy1984
Kommer du hit ofta?
Medlem
Forum Posts: 315
Member Since:
June 26, 2002
sp_UserOfflineSmall Offline
977813
November 14, 2005 - 9:09 pm
sp_Permalink sp_Print

Vore ändå intressant att veta vad som inte stämmer med min kod 🙂 Börjar msistänka att det har nåt att göra med entertrycket efter inmatningen..

Är din kod C lr C++?? Ska nämligen vara C..

beirut_nisse
Siktar mot toppen
Medlem
Forum Posts: 75
Member Since:
February 28, 2004
sp_UserOfflineSmall Offline
977816
November 14, 2005 - 9:12 pm
sp_Permalink sp_Print

if, else och else if finns väl i C?... eller har jag fel?....
och sen kom jag inte på hur det var man skrev istället för cin>>answer;
det är iaf c++

jeremy1984
Kommer du hit ofta?
Medlem
Forum Posts: 315
Member Since:
June 26, 2002
sp_UserOfflineSmall Offline
977825
November 14, 2005 - 9:23 pm
sp_Permalink sp_Print

beirut_nisse wrote: if, else och else if finns väl i C?... eller har jag fel?....
och sen kom jag inte på hur det var man skrev istället för cin>>answer;
det är iaf c++

Jodå! Men inte cin..
Tack för hjälpen, men syftet är inte att göra själva programmet utan mest att lära mig utav mina misstag osv.. Så jag undrar vad som blir fel med min kod?
Verkar som om scanf sparar typ inmatning till nästa loop... och att enter sparas oxå :S Eller?

ren
Kommer du hit ofta?
Medlem
Forum Posts: 833
Member Since:
January 15, 2004
sp_UserOfflineSmall Offline
977834
November 14, 2005 - 9:38 pm
sp_Permalink sp_Print

När du skriver in 'y' och trycker på return-tangenten så kommer 'y' NEW_LINE och att läsas från stdin.

Först läses y:et in i scanf() funktionen och "yes" kommer att skrivas ut.
I nästa iteration av while loopen läses NEW_LINE in i scanf funktionen och efter som det inte är 'y' så skrivs "no" ut.

För att lösa detta finns det åtminstone två metoder.
Den ena är att slänga allt som finns på stdin genom att skriva


fflush(stdin);

efter att du läst av teknet. Detta kommer resultera i att det irriterande NEW_LINE tecknet kommer att tas bort.

En annan metod är att skippa alla tecken som inte syns, t.ex. newline. Detta kan du göra genom att skriva


scanf("%1s",&answer);

istället.

Du kommer dock fortfarande att få problem med inmatningar som t.ex. "myra" som ger följade utskrift.


Enter y/n
myra
No
Enter y/n
Yes
Enter y/n
No
Enter y/n
No
Enter y/n

Detta är för att den behandlar de fyra tecknena 'm', 'y', 'r' och 'a' i vars en iteration av while loopen.

jeremy1984
Kommer du hit ofta?
Medlem
Forum Posts: 315
Member Since:
June 26, 2002
sp_UserOfflineSmall Offline
977842
November 14, 2005 - 9:46 pm
sp_Permalink sp_Print

ren wrote: När du skriver in 'y' och trycker på return-tangenten så kommer 'y' NEW_LINE och att läsas från stdin.

Först läses y:et in i scanf() funktionen och "yes" kommer att skrivas ut.
I nästa iteration av while loopen läses NEW_LINE in i scanf funktionen och efter som det inte är 'y' så skrivs "no" ut.

För att lösa detta finns det åtminstone två metoder.
Den ena är att slänga allt som finns på stdin genom att skriva


fflush(stdin);

efter att du läst av teknet. Detta kommer resultera i att det irriterande NEW_LINE tecknet kommer att tas bort.

En annan metod är att skippa alla tecken som inte syns, t.ex. newline. Detta kan du göra genom att skriva


scanf("%1s",&answer);

istället.

Du kommer dock fortfarande att få problem med inmatningar som t.ex. "myra" som ger följade utskrift.


Enter y/n
myra
No
Enter y/n
Yes
Enter y/n
No
Enter y/n
No
Enter y/n

Detta är för att den behandlar de fyra tecknena 'm', 'y', 'r' och 'a' i vars en iteration av while loopen.

Precis ett sånt svar jag väntade på 🙂 Var lite det problemet jag misstänkte då..
Tack så hemskt mycket!

jarlen
Kommer du hit ofta?
Medlem
Forum Posts: 1233
Member Since:
November 23, 2001
sp_UserOfflineSmall Offline
977876
November 14, 2005 - 10:49 pm
sp_Permalink sp_Print

Säg till om du har fler problem, jag läste en kurs i C för mindre än ett halvår sen och har kvar alla möjliga projekt och labbar..

Kan tipsa om vår gamla kurshemsida:
http://www.idt.mdh.se/kurser/c.....01/vt2005/

Där kan du läsa igenom föreläsningarna (rekommenderar faktiskt HTML-versionen), det finns många bra tips..

Och en annan sida man kunde kika på ibland (lite jobbigare, men det är ju ändå på svenska):

http://www.idt.mdh.se/kurser/c...../dlnweb02/

Nu är det väl säkert så att du inte har svårt för engelska, men det är ganska skönt med lite material på svenska också.

Forum Timezone: Europe/Stockholm
Most Users Ever Online: 1030
Currently Online:
Guest(s) 112
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Andreas Galistel: 16287
Jonas Klar: 15897
ilg@dd: 10810
Nyhet: 10607
Mind: 10550
Ctrl: 10355
Gueno: 9881
Guest: 9344
Snorch: 8881
Callister: 8468
Newest Members:
PetrbonFU PetrbonFU
Karine Bembry
Dolores Mcdaniels
Anibal McLeish
Francisca Alt
Alfie Everhart
Lester Huitt
Orlando Jorgensen
Mikki Lundgren
Dakota Kozlowski
Forum Stats:
Groups: 11
Forums: 59
Topics: 146630
Posts: 1300967

 

Member Stats:
Guest Posters: 2
Members: 79425
Moderators: 0
Admins: 11
Administrators: nordicadmin, Henrik Berntsson, Anton Karmehed, Carl Holmberg, Joel Oscarsson, Mikael Linnér, Mikael Schwartz, Andreas Paulsson, Nickebjrk, Mattias Pettersson, EmxL