Permalänk

c# basic problem.

Hej. Har fått en skoluppgift, och har lite små problem med den som jag undrar om de finns några lätta lösningar på. Mitt första problem är att jag ska göra en switch case där man kan skriva in spelar namn (uppgiften är att skapa ett spel), använder fgets för att spara inputen i en variabel, men när användaren sedan skrivit in sitt spelar namn så repeterar casen sin printf sats igen, innan nästa input. Vad kan jag ha råkat missa? eller gör jag något fel från grunden?

Permalänk
99:e percentilen
Skrivet av lesscool10:

Vad kan jag ha råkat missa? eller gör jag något fel från grunden?

Det är omöjligt för oss att svara på det utan att se någon kod. Klistra in det du har skrivit inom [code]-taggar så kanske vi kan komma någon vart. Alltså exempelvis:

[code]
int x = 5;

[/code]

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk

@Alling: Ber om ursäkt, här är koden

#include <stdio.h> #include <stdlib.h> struct command{ char a; char b; char c; char d; }; int main(int argc, char **argv) { struct command spelare; char a[10], b[10], c[10], d[10]; int meny, i = 0; printf("Spelare ett = 1\n" ); printf("spelare två = 2\n" ); printf("spelare tre = 3\n" ); printf("spelare fyra = 4\n" ); printf("inga fler spelare/starta spelare = 0\n" ); while(1 > i){ scanf("%d",&meny ); switch (meny){ case 1: printf("spelare ett\n"); fgets(a,10,stdin); break; case 2: printf("spelare två\n"); fgets(b,10,stdin); break; case 3: printf("spelare tre\n"); fgets(c,10,stdin); break; case 4: printf("spelare fyra\n"); fgets(d,10,stdin); break; case 0: i = 2; break; default: printf("try again\n" ); } } printf(" ett %s två %s tre %s fyra %s",a ,b ,c ,d); return 0; }

Permalänk
Medlem
Permalänk

@gonace: well fuck... c/c++ va?

Permalänk
Medlem

Hur lyckas man inte veta i vilket språk man programmerara?

Permalänk
Medlem
Skrivet av lesscool10:

@GonAce: well fuck... c/c++ va?

Att du använder funktioner såsom printf(), scanf(), inkluderar stdio.h, o.s.v. pekar på att du använder vanlig C.

Permalänk
Medlem

Du borde göra:

meny++;

I varje case, om jag förstår rätt vad det är du vill göra. Just nu verkar aldrig meny öka och därmed får du inte mata in nästa och nästa spelare utan spelare 1 upprepas hela tiden.

Visa signatur

8700K 5Ghz | 32GB 3200Mhz | 2080Ti 11GB | Phanteks Enthoo | Asus PG27AQ

Permalänk
Medlem

Problemet är att när du ber användaren mata in en siffra så matar användaren (förhoppningsvis) in en siffra följt av enter för att markera slut på inmatningen. Så om användaren matar in t.ex. 1 så kommer stdin innehålla "1\n" (\n = ny rad). Sen plockar du ut siffran med scanf, och efter det innehåller stdin fortfarande "\n".

Sen ber du användaren mata in ett namn, och efter det innehåller stdin t.ex. "\nArne\n". fgets läser sedan in tecken till och med nästa nyradstecken (elller tills antalet önskade karaktärer uppnåtts), så namnet på spelaren blir alltså "\n". Kvar i stdin ligger "Arne\n", så nästa runda i loopen kommer scanf misslyckas eftersom "Arne\n" inte matchar det angivna mönstret "%d". scanf signalerar detta genom att returnera 0 (antalet tecken som kunde läsas in), och meny kommer fortfarande innehålla det gamla värdet 1.

En enkel lösning är att lägga in while ((getchar()) != '\n'); efter scanf, vilket helt enkelt slänger bort alla tecken i stdin till och med nästa nyradstecken. Då kommer stdin vara helt tom när namnet på spelaren läses in.

Permalänk
Skrivet av SexMachine:

Hur lyckas man inte veta i vilket språk man programmerara?

När man är nybörjare och kanske råkar glömma bort ett plustecken hit och en fyrkant dit. Alla har varit nybörjare en gång.