統計給定的n個數中,負數、零和正數的個數。輸入數據有多組,每組佔一行,每行的第一個數是整數n(n<100),表示需要統計的數值的個數,然後是n個實數;如果n=0,則表示輸入結束,該行不做處理。對於每組輸入數據,輸出一行a,b和c,分別表示給定的數據中負數、零和正數的個數。
剛拿到題時,對於n=0,想到的是if語句,但是,結果卻是讓我很傷心啊~~
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
int n;
while(scanf("%d",&n)){
if(n) break;
int a=0,b=0,c=0;
double num;
for(int i=0;i<n;i++){
scanf("%lf",&num);
if (num>0) a++;
else if(num=0) b++;
else c++;
//printf("%d",num[i]);
}
printf("%d %d %d",a,b,c);
}
}
很明顯,在判斷的時候,他執行了if(n=0)語句。
這裏,比較巧的方法是,在while語句中控制n=0的情況
while(scanf("%d",&n),n)
做題時發現while語句都有用到scanf作爲真假條件,所以,做下筆記吧
while(scanf("%d",&n),n) | 當n爲0時中止循環 |
---|---|
while(scanf("%d",&n)) | 無輸入時,終止循環 |
while(scanf("%d",&n)!=EOF) | 讀到文件結尾時中止循環 |
while(~scanf("%d",&n)) | 讀到文件結尾時中止循環 |
while(scanf("%d",&n)==1) | 賦值失敗,跳出循環 |
- scanf("%d",&n)返回值就是輸入的整數的個數,所以scanf("%d",&n)=1,scanf("%d%d",&n,&m)=2
- ~是按位取反,即數值寫成2進制,然後0改成1,1改成0