2015-11-07 86 views
-2

我需要編寫一個程序,要求您輸入數字,並且當您按下圓點時,它將結束循環並顯示有多少數字是正數以及有多少是負數,例如4 5 - 9。通過按點循環停止

程序應該顯示2個數字是正數,1是負數,但那不是我的問題。當我按下點時,我被困在循環應該停止的部分,牢記我們處於編程的初級階段,所以我不能使用花哨的東西。

正如你可以在這裏看到我試着給變量兩種類型(charfloat),但這並不奏效,我認爲是因爲它使用了字符的值而不是數字本身。

int main() 
{ 
    float p, n; 
    char a; 

    n = 0; 
    p = 0; 

    do 
    { 
     printf("type a number"); 
     scanf("%s&%f", &a); 

     if (a < 0) 
     { 
      n = n + 1; 
     } 
     else if (a > 0) 
     { 
      p = p + 1; 
     } 
     else 
     { 
     } 
    } 
    while (a != '.'); 

    printf(" positive numbers are %2.0f \n negative numbers are %2.0f", p, n); 
    return 0; 
} 
+1

我的編輯是清理你的代碼縮進,這使得它很難閱讀(*提示*:做一個谷歌搜索C格式標準)。您需要稍微取消混合您的代碼。你首先在'a'變量中進行掃描(你在哪裏以及如何得到''%s&%f「'作爲掃描格式字符串,你認爲這意味着什麼? - 你是否閱讀過'scanf'文檔? )。然後,您甚至在知道它是否是用戶輸入的數字之前將其與「0」進行比較。您需要(1)讀取輸入,(2)確定它是否是數字,如果是,則轉換;如果是「。」,則退出。 – lurker

+0

對於計數,您應該使用整數('int'或其變體),而不是'float'。您可能想要讀取數字(輸入的數字是整數還是浮點數?),直到scanf()說「不是數字」。它會這樣做,當你輸入'.';它也會在你輸入'albatross'時做,或者你指出EOF。 (請注意,這樣可以避免「輸入內容既不是數字又不是'。」的情況下怎麼辦「)。然後您可以打印總計。進入時你應該忽略零點嗎?如果不是,則添加'int z = 0;'和'else z ++;'並打印它。 –

+0

@lurker yes obviosly我的代碼是不正確的,否則我不會在這裏發佈它,「%s&%f」只是爲了查看我輸入的內容是否會被作爲一個字符和一個數字來表達,並據此使用,但我知道這是錯誤的,是的,我需要一種方式,讓它讀取我鍵入的內容,然後確定它是一個字符還是浮點數。有沒有辦法做到這一點 –

回答

1

通過網上流行的C編譯器在這裏運行代碼:

http://www.tutorialspoint.com/compile_c_online.php

您的代碼運行正常。當你輸入「。」時會發生什麼?

編輯:(溶液)

的問題是,當輸入一個負數,

a = '-' 

其具有一個整數值大於零,因此不觸發否定的情況下。

然後該解決方案是檢查負號: ''

if (a == '-') {...} 

而且,請注意,輸入以終止循環正在被計爲正數。

0

如果第一個字符不是'。',那麼您應該將輸入讀入字符串並將其轉換爲整數。這樣的事情:

printf("type a number\n"); 
    scanf("%s", a); 
    if (a[0] == '.') { 
     break; 
    } 
    i = strtoul(a, NULL, 10); 

然後,你可以看到我是否積極或消極。聲明一個char [10]或其他東西。

+0

有沒有一種方法來取代我= strtoul(a,NULL,10);除此之外不太高級 –

+0

i = atoi(a)將是等效的。他們都將ASCII字符串轉換爲整數 – bruceg

+0

我應該如何聲明我爲intiger,並且如果您在atoi上進行查找,您會看到您需要知道的內容,是否有一種類型的庫標題我應該使用 –