2013-04-07 155 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
func (int x, int apple); 
int main() 

{int x,apple; 

scanf("%d",x); 
func (x,apple); 

if (apple==0) 
    printf("Yes"); 
    else if (apple==1) 
     printf("no!"); 
} 

func (int x,int apple) 

{ 

if ((x%7)==0||(x%11)==0||(x%13)==0) 
    apple=0; 
else 
    apple=1; 

} 

整個事情的想法是,該函數測試輸入的值是否是7,11或13的倍數,並給出結果。模塊函數不返回答案

該函數工作得很好(就編譯器沒有檢測到錯誤而言啓動就好)但是我在編譯器窗口得到的結果(輸入任何值後)是進程返回1,沒有其他的。而在此之前,它給了我一個Windows錯誤,而且我工作的項目墜毀。

我幾乎被迫使用指針,所以我做錯了什麼?

感謝幫助!

+1

我沒有看到任何在這裏指針,除了你被忽視的'scanf'。 – chris 2013-04-07 20:43:53

回答

1
  • 有被提供給scanf()格式說明"%d"和參數類型之間的不匹配,一個int被指定時,它必須是一個int*:這是未定義的行爲。合格x地址scanf(),並確保x通過檢查的scanf()其成功返回的任務數量返回值賦值:的void

    if (scanf("%d",&x) == 1) 
    { 
    } 
    
  • 國家返回類型func()

  • 傳遞地址applefunc()(和更改參數int* apple)左右的時間內func()apple所做的任何更改是給調用者可見:

    void func (int x, int* apple) 
    { 
        /* Dereference 'apple' for assignment. */ 
        *apple = 0; 
    }