Enkel (?) C-fråga..

Avdelningen för programmering, nätverk samt alternativa OS.
Post Reply
pperah
Posts: 2
Joined: 2009-01-04 22:26:05

Enkel (?) C-fråga..

Post by pperah »

Hej!

En fråga till!

Jag har såhär:

Code: Select all

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 )?
Last edited by pperah on 2009-01-11 18:10:06, edited 1 time in total.
User avatar
snigel
Hedersbit
Posts: 9632
Joined: 2002-03-08 15:06:33
Location: Göteborg

Post by snigel »

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
Posts: 2
Joined: 2009-01-04 22:26:05

Post by pperah »

snigel wrote: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?
User avatar
snigel
Hedersbit
Posts: 9632
Joined: 2002-03-08 15:06:33
Location: Göteborg

Post by snigel »

pperah wrote: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

Code: Select all

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
Posts: 10
Joined: 2003-10-09 12:48:47
Location: Härnösand
Contact:

Post by deegan »

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. :)

Code: Select all

#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
Posts: 213
Joined: 2004-08-15 19:38:43
Contact:

Post by lagu2653 »

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