Vinnaren i pepparkakshustävlingen!
2018-10-19, 10:13
  #3085
Medlem
Citat:
Ursprungligen postat av ArthurDayne
Hallåj, jag har gjort ett shell som ska kunna tolka kommandon och även pipes och redirects. Det funkar just nu felfritt men funktionen där själva exekveringen händer tycker jag är för lång så jag tog ut en del av den och gjorde en ny funktion och blev förvånad av att programmet helt plötsligt slutade fungera, det går att starta men när jag skriver in ett kommando jag vill köra så händer ingenting, det är som att execvp()(som bland annat kördes i den delen som jag delade upp) aldrig körs. Eftersom den är ganska lång så vill jag bara visa den releventa funktionen, jag tänker mig att det kanske är lätt fel som jag missat.

Här är original funktionen det är på rad 115 som jag tog ett stycke som ni ser i nästa länk https://pastebin.com/pzJtHVjh

Och här är den nya som är uppdelad i två delar, på rad 150 kallas den nya funktionen lastFork https://pastebin.com/YJJ1rrUh

Som ni ser så kallar jag fork() och sedan i barnet så kallar jag funktionen som innehåller exakt samma kod som i den förra men av någon anledning så är det som att execvp() aldrig händer! Är det något jag missupfattat? typ att exec-funktionerna inte kan kallas på andra ställen eller något.

I din utbrutna funktion har du wrappat hela innehållet i
Kod:
 if(nCommands == 1 &&  comLine[0].infile != NULL) 

Så är det inte i orginal-filen, där används den if-satsen bara för första if-statmentet.
Citera
2018-12-17, 14:21
  #3086
Medlem
Hej!
En fråga om GTK.
Jag är helt nybörjare i GTK och försöker skicka två olika slags värden till en callback_function i C. Det ena värdet är gtk_entry och det andra gtk_spin_button. Entryvärdet jag har, det fungerar bra, men värdet för spin button, fungerar inte och jag är inte helt säker på varför. Kan någon här hjälpa mig? Tycker det är svårt att söka info, inte helt säker på vad jag ska använda för sökord.

Error-koden jag får är att jag får segmenteringsfel.

Tack på förhand!


Kod:
typedef struct {
    GtkWidget *name;
    GtkWidget *stad;
    GtkWidget *volt;
} example;

void b_clicked(GtkButton *c_button, example *test)
{
   gdouble value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(test->volt));
   g_print("Förnamn: %s\n", gtk_entry_get_text(GTK_ENTRY(test->name)));
   g_print"Value: %.0f\n", value);
}

int main(int argc, char *argv[]){
   GtkWidget *window;
   GtkWidget *grid;
   GtkWidget *c_button;
   GtkWidget *q_button;
   GtkWidget *label_name, *label_stad, *label_volt;
   GtkWidget *h_name, *h_stad, *h_volt;

   gtk_init(&argc, &argv);

   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title(GTK_WINDOW(window), "Test");
   gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
   g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
   gtk_container_set_border_width(GTK_CONTAINER(window), 10);
   
   grid = gtk_grid_new();
   gtk_container_add(GTK_CONTAINER(window), grid);
   gtk_grid_set_row_spacing(GTK_GRID(grid),3);

   label_name = gtk_label_new("Förnamn");

   example test;
   h_name = gtk_entry_new();
   test.name = h_name;
   gtk_entry_set_placeholder_text(GTK_ENTRY(h_name), "Namn : ");

   label_volt = gtk_label_new("Ange värde : ");
   test.volt = h_volt;
   h_volt = gtk_spin_button_new_with_range(1,100,0.01);

   c_button = gtk_button_new_with_label("Calculate");
   g_signal_connect(c_button, "clicked", G_CALLBACK(b_clicked), &test);
   q_button = gtk_button_new_with_label("Quit");
   g_signal_connect(q_button, "clicked", G_CALLBACK(gtk_main_quit), NULL);

   gtk_grid_attach(GTK_GRID(grid), label_name, 0, 0, 1, 1);
   gtk_grid_attach(GTK_GRID(grid), h_name, 1, 0, 1, 1);
   gtk_grid_attach(GTK_GRID(grid), label_volt, 0, 1, 1, 1);
   gtk_grid_attach(GTK_GRID(grid), h_volt, 1, 1, 1, 1);
   gtk_grid_attach(GTK_GRID(grid), c_button, 0, 3, 2, 1);
   gtk_grid_attach(GTK_GRID(grid), q_button, 0, 4, 2, 1);

   gtk_widget_show_all(window);
   gtk_main();

   return 0;
}
Citera
2018-12-17, 14:28
  #3087
Medlem
Citat:
Ursprungligen postat av Tiger-Lily
Hej!
En fråga om GTK.
Jag är helt nybörjare i GTK och försöker skicka två olika slags värden till en callback_function i C. Det ena värdet är gtk_entry och det andra gtk_spin_button. Entryvärdet jag har, det fungerar bra, men värdet för spin button, fungerar inte och jag är inte helt säker på varför. Kan någon här hjälpa mig?

Vad sätter du test.volt till?
Citera
2018-12-17, 15:33
  #3088
Medlem
Citat:
Ursprungligen postat av Hominem
Vad sätter du test.volt till?

Tack för hjälpen, visste det var något jag inte fått till korrekt.
Citera
2019-01-02, 14:10
  #3089
Medlem
Jag håller på att testa gtk 3.0 i C och jag har ett fält, där användaren matar in en bokstav. Denna bokstav vill jag sedan använda som ett argument, när jag anropar en funktion, men funktionen tar en char, men bokstaven jag har är en char *. Hur löser jag detta, om jag inte kan ändra den funktion jag anropar?


void skriv(GtkButton *button, example *ord){
Char * letter1 = gtk_entry_get_text(GTK_ENTRY(ord->bokstav1));

skriva(letter1);
}

Ber om ursäkt för dåligt inlägg, vi har strömavbrott, så skriver från mobilen.
Citera
2019-01-02, 15:02
  #3090
Medlem
kaks avatar
Citat:
Ursprungligen postat av Tiger-Lily
Jag håller på att testa gtk 3.0 i C och jag har ett fält, där användaren matar in en bokstav. Denna bokstav vill jag sedan använda som ett argument, när jag anropar en funktion, men funktionen tar en char, men bokstaven jag har är en char *. Hur löser jag detta, om jag inte kan ändra den funktion jag anropar?


Kod:
void skriv(GtkButton *buttonexample *ord) {
    
char letter1 gtk_entry_get_text(GTK_ENTRY(ord->bokstav1));

    
skriva(letter1);

Ber om ursäkt för dåligt inlägg, vi har strömavbrott, så skriver från mobilen.

Tycker det är bättre att först satsa på att lära sig grundläggande C innan man ger sig på gtk eller andra bibliotek.
Även om det är roligare att få den feedback som ett gui ger måste man först förstå t.ex skillnaderna och likheterna mellan pekare och arrayer.
I detta fall gissar jag att gtk_entry_get_text returnerar en pekare till första tecknet i texten.
Du kan då nå tecknet antingen som *letter1 eller letter1[0]. Faktiskt även som 0[letter1], men vem skulle vilja skriva så?
Citera
2019-01-07, 01:22
  #3091
Medlem
ezengineerings avatar
c++

Behöver lite snabb hjälp med en enkel grej som jag glömt och inte hittar någonstans...


jag har gjort en meny med olika kategorier och numrerat dessa.
var kategori har ett värde och jag vill att när du väljer en viss kategori så ska menyn loopas och alla värden ska vara samma som förut, förutom den kategori som användaren valt för den ska vara 1 - vad värdet var från början.

jag har gjort loopen av menyn, behöver hjälp med hur jag ska få talet i kategorin att minska med 1 när jag valt den.

[EX]

?if(val = 1...? Ska jag ens använda if?

case '1':
cout << "Du har valt x" << endl;
break;

Alltså nästa gång menyn kommer upp ska då X vara X-1

Tacksam för alla svar!
Citera
2019-01-07, 01:24
  #3092
Medlem
Trollfeeders avatar
Citat:
Ursprungligen postat av ezengineering
Behöver lite snabb hjälp med en enkel grej som jag glömt och inte hittar någonstans...


jag har gjort en meny med olika kategorier och numrerat dessa.
var kategori har ett värde och jag vill att när du väljer en viss kategori så ska menyn loopas och alla värden ska vara samma som förut, förutom den kategori som användaren valt för den ska vara 1 - vad värdet var från början.

jag har gjort loopen av menyn, behöver hjälp med hur jag ska få talet i kategorin att minska med 1 när jag valt den.

[EX]

?if(val = 1...? Ska jag ens använda if?

case '1':
cout << "Du har valt x" << endl;
break;

Alltså nästa gång menyn kommer upp ska då X vara X-1

Tacksam för alla svar!

Din fråga är rätt rörig men om jag förstår rätt undrar du hur man dekrementerar med 1?

X--

Om du ska använda värdet på X så kan --X vara att föredra beroende på om du vill få talet före eller efter dekrementet, för övrigt.
__________________
Senast redigerad av Trollfeeder 2019-01-07 kl. 01:31.
Citera
2019-01-07, 01:25
  #3093
Medlem
ezengineerings avatar
Exakt
Citera
2019-01-22, 17:58
  #3094
Medlem
Ursäkta trivial fråga, har kodat i C i ungefär 4 timmar totalt så kan absolut ingenting om någonting.

Den här koden skriver ut att test har värdet 6.3 miljoner, varför gör den det? Den fungerar som den ska (skriver ut 23) om jag tar bort "&" innan test, men min föreläsare lärde ut att jag måste ha med det där tecknet för att variabeln ska kunna hittas (eller något sånt). Vad är det som händer i den här koden?

Kod:
int main()
{  int test=23;
    printf("\nThe value of test is %d", &test);
    return 0;
}
Citera
2019-01-22, 18:01
  #3095
Medlem
vim.s avatar
Citat:
Ursprungligen postat av Josef.K.33
Ursäkta trivial fråga, har kodat i C i ungefär 4 timmar totalt så kan absolut ingenting om någonting.

Den här koden skriver ut att test har värdet 6.3 miljoner, varför gör den det? Den fungerar som den ska (skriver ut 23) om jag tar bort "&" innan test, men min föreläsare lärde ut att jag måste ha med det där tecknet för att variabeln ska kunna hittas (eller något sånt). Vad är det som händer i den här koden?

Kod:
int main()
{  int test=23;
    printf("\nThe value of test is %d", &test);
    return 0;
}

För att du skriver ut dess adress, inte värdet.
Citera
2019-01-22, 18:05
  #3096
Medlem
Citat:
Ursprungligen postat av vim.
För att du skriver ut dess adress, inte värdet.

Ok, tack

Har insett att jag behöver adressen med scanf, men inte med printf.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback