Enkel (?) C-fråga..

Avdelningen för programmering, nätverk samt alternativa OS.
Skriv svar
pperah
Inlägg: 2
Blev medlem: 2009-01-04 22:26:05

Enkel (?) C-fråga..

Inlägg av pperah » 2009-01-11 18:06:08

Hej!

En fråga till!

Jag har såhär:

Kod: Markera allt

while( true ){

svar = getchar();

if( svar == 0 ){
break;
}

}
Men if-satsen med break verkar inte funka. Det måste väl vara för att man inte kan gämföra en char med int? Hur hade ni gjort för att få den att breaka om man matar in 0, ( en nolla )?
Senast redigerad av 1 pperah, redigerad totalt 2009 gånger.

Användarvisningsbild
snigel
Hedersbit
Inlägg: 9625
Blev medlem: 2002-03-08 15:06:33
Ort: Göteborg

Inlägg av snigel » 2009-01-11 18:08:00

En char är ett numeriskt värde som representerar ett tecken. Char 0 representerar inte tecknet 0, utan något annat.

Antingen får du skriva svar == 48 (eller vilket värde nu 0 har i ascii-tabellen) eller får du skriva svar == '0' som syftar på att att du tryckt på en nolla.

http://www.asciitable.com/
http://sniglom.blogspot.com
Work |i5 760@4.2GHz|16GB|P55|GTX 670|850 500GB|Xonar D2|2TB
Extra |q9550@3.4GHz|8GB|P45|GTX 670|830 256GB|Audigy 2
MacB.|p8600@2.4GHz|8GB|320m|BX100 500GB
Serve|c1037@1.8GHz|8GB|NM70|X25-M 80GB|Seagate 4TB

pperah
Inlägg: 2
Blev medlem: 2009-01-04 22:26:05

Inlägg av pperah » 2009-01-11 18:31:59

snigel skrev:En char är ett numeriskt värde som representerar ett tecken. Char 0 representerar inte tecknet 0, utan något annat.

Antingen får du skriva svar == 48 (eller vilket värde nu 0 har i ascii-tabellen) eller får du skriva svar == '0' som syftar på att att du tryckt på en nolla.

http://www.asciitable.com/
Tack!

Gjorde ett litet program nu baserat på det du sa och det funkar fint..

Men när jag gör samma sak i det riktiga programmet, där jag har problem, så funkar det inte, den hoppar inte ur.. Har skrivit precis likadant. Kan det finnas något annat som ligger och spökar?

Användarvisningsbild
snigel
Hedersbit
Inlägg: 9625
Blev medlem: 2002-03-08 15:06:33
Ort: Göteborg

Inlägg av snigel » 2009-01-11 20:02:43

pperah skrev:Tack!

Gjorde ett litet program nu baserat på det du sa och det funkar fint..

Men när jag gör samma sak i det riktiga programmet, där jag har problem, så funkar det inte, den hoppar inte ur.. Har skrivit precis likadant. Kan det finnas något annat som ligger och spökar?
När jag inte vet hur långt programmet kommer i loopar brukar jag sätta ut lite printf med nummer eller beskrivande text här och var för att se var det stannat, gör det mycket lättare att felsöka.

För att göra ett exempel med ditt program

Kod: Markera allt

while( true ){
   printf("inne i while-loopen");
   svar = getchar();
   printf("hämtade tangent");
   if( svar == 0 ){
      printf("svar == 0, borde göra break");
      break;
   }
}
printf("ute ur loopen");
Ett annat bra sätt att debugga med printf är att låta den skriva ut vad exempelvis getchar hämtar, då kan du se vilken int eller char man tryckt på.
http://sniglom.blogspot.com
Work |i5 760@4.2GHz|16GB|P55|GTX 670|850 500GB|Xonar D2|2TB
Extra |q9550@3.4GHz|8GB|P45|GTX 670|830 256GB|Audigy 2
MacB.|p8600@2.4GHz|8GB|320m|BX100 500GB
Serve|c1037@1.8GHz|8GB|NM70|X25-M 80GB|Seagate 4TB

deegan
Inlägg: 10
Blev medlem: 2003-10-09 12:48:47
Ort: Härnösand
Kontakt:

Inlägg av deegan » 2009-01-30 13:29:44

Jag skulle nog använt strlen för att kolla först. Mitt exempel är inte det vackraste, men du får en hum om vad du ska göra. :)

Kod: Markera allt

#include <stdio.h>
#include <string.h>

int main()
{
        char svar[256];
        int svar_len;
        while( 1 )
        {
                printf("Mata in: ");
                gets(svar);
                svar_len = strlen(svar);

                if(svar_len < 0)
                {
                        printf("Ingen inmatning. \n");
                        break;
                }
                if(svar_len > 0)
                {
                        printf("Du matade in: %s \n", svar);
                        printf("Antal tecken: %d \n", svar_len);
                }
        }
}
omfg ffs monkii!!!11

lagu2653
Inlägg: 213
Blev medlem: 2004-08-15 19:38:43
Kontakt:

Inlägg av lagu2653 » 2009-02-01 12:03:26

if (svar == '0')...
Many say that the dream of a good life is the dream of a good thermometer

Skriv svar