![](/img/trans.png)
[英]Why does my float print out as 0 even though I input 13.5 for it using 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.