繁体   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