簡體   English   中英

使用For循環編程C打印一維數組

[英]Printing One Dimensional Array with For Loop Programming C

我目前正在閱讀有關C編程的K&R書,並且在將printf()函數與數組一起使用時遇到了問題。 我測試了在初始while循環內打印每個元素時,該數組應該保存的所有內容都是正確的,但是當我嘗試在while循環外以及main()函數內進行打印時,沒有得到所需的答案。 這是代碼。

for(i=0;i<10;++i){
    ndigits[i]=0;
}
while((c=getchar())!=EOF){

    if(c>='0'&&c<='9'){
        ++ndigits[c-'0'];
    }
    else if(c==' '||c=='\t'||c=='\n'){
        ++nblank;
    }
    else{
        ++nother;
    }
}

for(i=0;i<10;++i){
    printf("%d ", ndigits[i]);
}
printf(" blank space: %d other: %d\n", nblank, nother); 

該程序應該計算空格和其他字符,並在數組中存儲每個數字的出現次數。 當我注釋掉用於打印數組的for循環時,對空格和其他字符進行計數會很好。 但是,當我運行程序時未注釋掉打印數組時,它僅打印數組中的第一個元素,即零的數量,其旁邊是^ C,甚至沒有到達最后一行,而白色空格和其他字符被打印。

它是通過鍵盤順時針進行的用戶輸入,我使用的是notepad ++和MinGW作為我的編譯器。

恩。

Input: 1353466113 udahkdakdjf
Output: 0 ^C

Input: 000000
Output: 6 ^C

我已經通過在while循環中放置一個printf()函數來檢查程序,以檢查該數組是否具有正確的值,並且是否正確。 非常感謝所有幫助。

  1. 使用Ctrl C發出信號結束輸入的作用還不止於此,它表示程序終止。 根據您的控制台, Ctrl DCtrl Z可能會解決問題。

  2. 確保ch是一個int而不是一個char

  3. 您對空白的測試很好,但是不完整。 建議

     #include <ctype.h> ... // else if(c==' '||c=='\\t'||c=='\\n'){ else if (isspace(c)) { 

@ user3191564:我剛剛在筆記本電腦上測試了您的代碼,它給我的輸出與您輸入的相同。 我認為EOF標志是給您奇怪輸出的原因。

程序中的其他所有內容在邏輯上看起來都是正確的。 在while循環,getchar和EOF中進行關鍵循環。

而且我不知道您是否正確使用了getchar()。 有關更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM