![](/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.