2015-05-12, 18:26
  #1
Medlem
smellyproofs avatar
Så här kan man ju definiera en char variabel.

Kod:
char namn[20];
scanf("%s, namn);

Detta kräver ju dock input från användaren. Hur kan man definiera en char variabel i förväg?
Alltså typ

Kod:
namn[20] = "Adolf";

Den koden är ju ogiltig men vad är det korrekta sättet att göra detta på?
__________________
Senast redigerad av smellyproof 2015-05-12 kl. 18:28.
Citera
2015-05-12, 18:33
  #2
Medlem
Gynekologstols avatar
Citat:
Ursprungligen postat av smellyproof
Så här kan man ju definiera en char variabel.

Kod:
char namn[20];
scanf("%s, namn);

Detta kräver ju dock input från användaren. Hur kan man definiera en char variabel i förväg?
Alltså typ

Kod:
namn[20] = "Adolf";

Den koden är ju ogiltig men vad är det korrekta sättet att göra detta på?
const char *namn = "Adolf";
Citera
2015-05-12, 18:35
  #3
Medlem
kinesarsles avatar
Det finns inget jättesmidigt sätt att göra det på. Du kan använda strcpy och liknande, men behöver du hålla på med sådan stränghantering bör du nog överväga att byta språk.
Citera
2015-05-12, 18:38
  #4
Medlem
smellyproofs avatar
Citat:
Ursprungligen postat av kinesarsle
Det finns inget jättesmidigt sätt att göra det på. Du kan använda strcpy och liknande, men behöver du hålla på med sådan stränghantering bör du nog överväga att byta språk.
Det finns säkert andra sätt att göra det på. Men jag vill försöka ta bort vissa poster ur en databas. Försöker göra det genom att byta strängen till blankt namn. Ovanstående sätt verkar dock inte fungera.

Kod:
int tabort(struct person katalog[], int n) {
int i = 0;
int bort;

printf("\n Skriv in det Id du vill ta bort: ");
scanf("%d", &bort);

while(katalog[i].id != bort  && i < 1000) {
	i++;}

if (bort == katalog[i].id){
	printf("\nDu har tagit bort Id: %d\nNamn: %s \nNummer: %s", katalog[i].id, katalog[i].namn,
         katalog[i].numm);
         
         katalog[i].id = 0;
         const char*katalog[i].namn = "";
         const char*katalog[i].numm = "";
        
         }

else{
	printf("\n Det Id du vill ta bort finns inte!");}


 return n;
}
Citera
2015-05-12, 18:44
  #5
Medlem
kinesarsles avatar
Du kan inte jämföra char-arrayer på det sättet. Om a och b är char* motsvarar a==b att kolla om a[0] och b[0] pekar på samma minnesadress.

Googla "compare strings c" eller något.
Citera
2015-05-12, 19:47
  #6
Medlem
Kod:
char namn[20] = "Adolf";
Citera
2015-05-16, 00:39
  #7
Medlem
Joakwims avatar
Citat:
Ursprungligen postat av kinesarsle
Det finns inget jättesmidigt sätt att göra det på. Du kan använda strcpy och liknande, men behöver du hålla på med sådan stränghantering bör du nog överväga att byta språk.
Va?

main.c:
[PHP]#include <stdio.h>

int main() {
char name[] = "funkar visst";
printf("%s\n", name);
}[/PHP]
Citat:
gcc -o program -std=c89 main.c

Det funkar visst...
Citera
2015-05-16, 09:38
  #8
Medlem
Citat:
Ursprungligen postat av smellyproof
Det finns säkert andra sätt att göra det på. Men jag vill försöka ta bort vissa poster ur en databas. Försöker göra det genom att byta strängen till blankt namn.

Kod:
const char*katalog[i].namn = "";
const char*katalog[i].numm = "";

Om en post är deklarerad såhär...

Kod:
struct person {
    int id;
    char namn[32];
    char numm[32];
};

...kommer namn och numm alltid innehålla 32 char vardera. Man kan inte ändra en arrays storlek. Men biblioteksfunktionerna för strängar, t.ex. de som skriver ut, jämför eller kopierar, läser bara upp till det första '\0'-tecknet, så om du sätter namn[0] och numm[0] till det charvärdet får du en "tom sträng". Vad som finns för skräp efter '\0' kvittar, försök inte läsa det om det är odefinierat (aldrig har satts till något värde efter att programmet startade) bara.

Kod:
katalog[i].namn[0] = '\0';
katalog[i].numm[0] = '\0';

PS: Men det kommer inte att ta bort posten, bara sätta namn och nummer till tomma strängar.
Citera
2015-05-16, 21:13
  #9
Medlem
smellyproofs avatar
Citat:
Ursprungligen postat av Big-Endian
Om en post är deklarerad såhär...


PS: Men det kommer inte att ta bort posten, bara sätta namn och nummer till tomma strängar.
Ja de förstår ja men tack för tipset tror de räcker. Vet du hur man skulle kunna definera en int variabel på samma sätt? Alltså inte till 0 utan till "tomt"?

Om de är
Kod:
 struct person {
 int id;
 char namn[MAXNAMN];
 char numm[MAXNUMM];
};

katalog[i].id = ?;
__________________
Senast redigerad av smellyproof 2015-05-16 kl. 22:08.
Citera
2015-05-18, 07:43
  #10
Medlem
kinesarsles avatar
Citat:
Ursprungligen postat av Joakwim
Va?

main.c:
[PHP]#include <stdio.h>

int main() {
char name[] = "funkar visst";
printf("%s\n", name);
}[/PHP]

Det funkar visst...
Ja, om du gör det under deklarationen går det, men detta hade inte fungerat.

[PHP]#include <stdio.h>

int main() {
char name[20];
name = "fungerar ej";
printf("%s\n", name);
}[/PHP]
Citera
2015-05-18, 08:49
  #11
Medlem
Citat:
Ursprungligen postat av smellyproof
Ja de förstår ja men tack för tipset tror de räcker. Vet du hur man skulle kunna definera en int variabel på samma sätt? Alltså inte till 0 utan till "tomt"?

Om de är
Kod:
 struct person {
 int id;
 char namn[MAXNAMN];
 char numm[MAXNUMM];
};

katalog[i].id = ?;
För det första så går det inte att sätta något till "tomma" värdet i C.
Det som visades ovan är ett hack, om mellan raderna skriver han .. du borde inte göra detta.

Det som kan komma närmast det tomma värdet är tomma strängar. Samma sak går INTE att göra med int.
(Och det borde inte göras med tomma strängar heller)

Men tomma strängar.. Tja .. du hade fått underkänt på mina labbar eller en snack med mig eller chefen om du försökt på mitt jobb.

Men för att kunna ge vettig hjälp så behöver jag mer info:

Var ligger master datan ? Om det ligger i minnet så kan du kanske påverka minnet.
# Det kan ibland laddas från en databas.
# Det kan liggar lagrat inne i programmet.
# Det kan ligga som en fil på disk.
# Det kan vara något som ligger i minnet (men som man skriver in under körning)..

Oftast är det bäst att ändra datan på det ställe där "master datan" ligger.
# Ofta kan färdiga program redan ha funktioner för att editera.. bäst att använda dem om de finns.

Vad för programm är det som du går in o pillar i ?
# Är det en "single user system" som enbart du pillar på ?
# Är det någon data som andra personer än du använder ?
# Är det ett existerande system som någon annan har skrivet ?

Om någon annan har skrivet det, så är chansen stor att det redan finns någon funktion för att ta bort poster.
I så fall borde du försöka hitta denna/dessa funktionen(er)
Ofta så skulle du ange ID på den person som du vill ta bort..

Om det är ett singel user sytem där man har "master datan" i minne..
Då kan du kanske ta bort en post genom att skriva lite C kod.

försöka till ledande frågor:
Om denna funktionen anroppas 2 gånger.. (Och första gången tog bort ett person)
Hur borde den då anroppas den andra gången ?
Är det något av de inkommande variablerna till funktionen som borde ändrats ?
Citera
2015-05-18, 09:54
  #12
Medlem
smellyproofs avatar
Citat:
Ursprungligen postat av sagonar
För det första så går det inte att sätta något till "tomma" värdet i C.
Det som visades ovan är ett hack, om mellan raderna skriver han .. du borde inte göra detta.

Det som kan komma närmast det tomma värdet är tomma strängar. Samma sak går INTE att göra med int.
(Och det borde inte göras med tomma strängar heller)

Men tomma strängar.. Tja .. du hade fått underkänt på mina labbar eller en snack med mig eller chefen om du försökt på mitt jobb.

Men för att kunna ge vettig hjälp så behöver jag mer info:

Var ligger master datan ? Om det ligger i minnet så kan du kanske påverka minnet.
# Det kan ibland laddas från en databas.
# Det kan liggar lagrat inne i programmet.
# Det kan ligga som en fil på disk.
# Det kan vara något som ligger i minnet (men som man skriver in under körning)..

Oftast är det bäst att ändra datan på det ställe där "master datan" ligger.
# Ofta kan färdiga program redan ha funktioner för att editera.. bäst att använda dem om de finns.

Vad för programm är det som du går in o pillar i ?
# Är det en "single user system" som enbart du pillar på ?
# Är det någon data som andra personer än du använder ?
# Är det ett existerande system som någon annan har skrivet ?

Om någon annan har skrivet det, så är chansen stor att det redan finns någon funktion för att ta bort poster.
I så fall borde du försöka hitta denna/dessa funktionen(er)
Ofta så skulle du ange ID på den person som du vill ta bort..

Om det är ett singel user sytem där man har "master datan" i minne..
Då kan du kanske ta bort en post genom att skriva lite C kod.

försöka till ledande frågor:
Om denna funktionen anroppas 2 gånger.. (Och första gången tog bort ett person)
Hur borde den då anroppas den andra gången ?
Är det något av de inkommande variablerna till funktionen som borde ändrats ?
Ja de var en dum idé med tomma strängar. Jag skrev om koden så den faktiskt tog bort posterna istället.
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in