簡體   English   中英

為什么我的scanf輸入無法正確打印?

[英]Why wont my input from scanf print correctly?

我的程序從輸入中掃描並打印所有使用的大寫字母。

我也試圖在程序末尾從標准輸入輸出原始輸入。

但是當我使用printf時,似乎跳過了輸入表達式的第一部分,將剩余的內容打印在我的字符數組中。 請幫助我看看問題出在哪里。 -代碼中的注釋-

#include <stdio.h>

int main(void){

char input[81];
int letters[91];
int i;

    //initialize arrays input and letters
for (i = 0; i < 90; i++) letters[i] = 2;
for (i = 0 ; i < 80; i++) input[i] = 'a';
i = 0;  

    //reads into input array until EOF
while((scanf("%c",input)!= EOF)){

    //checks input for characters A-Z 
    if((input[i]>= 'A' && input[i]<= 'Z'))


       letters[input[i]] = 1;
    }

    //prints capital letters from input that occur at least once
for(i = 'A'; i < 'Z'; i++){
    if (letters[i]==1)
    printf("%c", i);}        // this output works fine, the scan worked??


//print blank line
printf("\n\n");


// print input
printf("%s\n", input);      //This is where the incorrect output comes from.  

return 0;}

我原來的輸入會改變嗎? 為什么? 首先我的輸入沒有被正確掃描嗎? 請迅速回應!

這里:

while((scanf("%c",input)!= EOF)){

您只會將字符讀入input[0] 這對於您為letters所做的工作很好,但是顯然,當您嘗試打印input ,它將無法按預期工作。

修復它時,您還需要記住在最后一個輸入字符后添加一個終止\\0

scanf循環一次讀取您的輸入一個字符,並將該一個字符存儲在input[0] scanf循環完全結束時, input[0]包含最后讀取的字符,其余input保持不變。

要修復,您需要在scanf循環的末尾包含i++

順便說一句,用一次對fgets調用來填充輸入緩沖區,然后用以下命令循環遍歷輸入緩沖區會更清楚(更有效): for (i=0; buf[i]!='\\0'; i++) { ... }

你必須做

while((scanf("%c",&input[i])!= EOF))
{i++;}

代替這個

while((scanf("%c",&input)!= EOF))
{}

您正在做的是每次將字符掃描到數組中第一個元素的地址,因此它一次又一次被覆蓋。 input []數組的其余部分未被訪問,因此不會更改

暫無
暫無

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

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