2012-04-19 2 views
1

私はこのコードを持っており、それは私のために実行されていません。エラーや警告は表示されません。だから私は何が間違っているのか分からない。私は構造体のポインタについてあまり経験がありませんし、コードのその部分が実行されていないかどうかもわかりません。structとポインタプログラムはコンパイル時に何もしません。エラーまたは警告を表示しない

私はCode :: BlocksとDevC++の両方をコンパイルに使用しましたが、いずれも異なるものはありませんでした。

少し長めですが、3つの機能しかありません。私のためにスクリーンに何も印刷されません。

#include <stdio.h> 
#include <stdlib.h> 

struct foo{ 
     int num; 
     char *word; 
     struct foo *ptr; 
}; 
void func1(struct foo); 
void func2(struct foo*); 
void func3(struct foo); 

int main() { 
     struct foo a; 
     a.num = 5; 
     a.word ="myword"; 
     func1(a); 
     printf("1 %d %s\n", a.num, a.word); 

     a.num = 100; 
     a.word = "secondword"; 
     func2(&a); 
     printf("2 %d %s\n", a.num, a.word); 

     a.ptr = &a; 
     a.num = 50; 
     a.word = "mylastword"; 
     func3(a); 
     printf("4 %d %s\n", a.num, a.word); 
} 

void func1(struct foo a) 
{ 
     while(*(a.word) != '\0'); 
     { 
      putchar(*(a.word)); 
      a.word++; 
     } 
     putchar('\n'); 
     if(a.num % 10 != 0) 
     { 
      a.num *= 2; 
     } 
     a.word--; 
     printf("num is %d\n", a.num); 
} 

void func2(struct foo *a) 
{ 
     while(*(a->word) != '\0') 
      { putchar(*(a->word)); 
       a->word++; } 

        putchar('\n'); 
     if(a->num % 10 != 0) 
      { a->num *= 2; } 
     a->word--; 
     printf("num is %d\n", (*a).num); 
} 

void func3(struct foo a) 
{ 
     if(a.num > a.ptr->num) 
      { a.num = 500; } 
     else 
      { a.num = a.ptr->num +1; } 
     a.word = "myotherword"; 
     a.ptr->word = "yetAnotherWord"; 
     printf("3 %d %s\n", a.num, a.word); 
} 

ご協力いただければ幸いです。

ありがとうございます。

+2

デバッガでコードをステップ実行します。デバッガを使用してコードをステップ実行するのは100%必須です。なぜそれが動作するのか理解できない場合は特にそうです。 – abelenky

答えて

8
void func1(struct foo a) 
{ 
    while(*(a.word) != '\0'); 

whileステートメントの後にはセミコロンを使用しないでください。固定

、それは印刷した場合:

[4:58pm][[email protected] /tmp] ./foo 
myword 
num is 10 
1 5 myword 
secondword 
num is 100 
2 100 d 
3 51 myotherword 
4 50 yetAnotherWord 
をそしてabelenkyさんのコメントを強化するために、これは、デバッガを発見するために3秒かかりました。

[4:59pm][[email protected] /tmp] g++ -g foo.cc -o foo 
[4:59pm][[email protected] /tmp] gdb ./foo 
GNU gdb 6.3.50-20050815 (Apple version gdb-1752) (Sat Jan 28 03:02:46 UTC 2012) 

(gdb) run 
Starting program: /private/tmp/foo 
Reading symbols for shared libraries ++......................... done 
^C 
Program received signal SIGINT, Interrupt. 
func1 (a={num = 5, word = 0x100000e91 "myword", ptr = 0x7fff5fbffa58}) at foo.cc:34 
34  while(*(a.word) != '\0'); 
(gdb) 
+2

_excellent_ gdb'のデモンストレーション、それはサフランの重さに値する。 – sarnold

+0

すべての構文エラーを設計して取り除き、ブログ/グループの経験豊かな開発者に難解で不満なことをやり直そうとするのは楽しいことです。 C. Sci。コースは今日ですか? –

+0

@MartinJames:残念ながら、少なくとも私のユニではない、私はDevC++でデバッガを使用しただけです。私はそれが絶対に悪い選択肢の一つだと聞いてきましたが、それは私の教授が私たちのすべての作業をまとめようとしていることです。私は先月Code:Blocksに切り替えました。私はデバッガを使用する方法を学ぶ機会を得ていないので、デバッグするためにコマンドを実行する必要があると思います。私は上に述べたgdbを探しました。明らかに、Linux用にビルドされました(私はWindows 7上にあります)が、ちょうど私が読んだMinGwをダウンロードしたのは、gdbのWin版です... – 1337475

関連する問題