繁体   English   中英

c-在使用scanf的一系列输入中,未打印最后一个值(使用printf)

[英]c - in a series of input using scanf, last value is not being printed ( using printf )

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i, j;
    float k, l;
    char a, b;
    scanf("%d%d%f%f%c%c", &i, &j, &k, &l, &a, &b);
    printf("%d %d %f %f %c %c", i, j, k, l, a, b);
    return 0;
}

该程序接受所有六个输入,但输出前5个变量。

谁能在我的概念/程序中指出问题?

如预期的那样,问题出在%c

scanf(“%d%d%f%f%c%c”,&i,&j,&k,&l,&a,&b);

就目前而言,鉴于您的输入如下所示,那么您的最后一个字符d将不会被读取-而是将c后面的空格解释为字符输入:

1 2 3.0 4.0 c d

因此,您的scanf应该更改为:

scanf("%d%d%f%f %c %c", &i, &j, &k, &l, &a, &b);  // <-- Notice there is a space before each %c to read over space characters

注意:C在这方面确实很奇怪,我想每个人都必须几次遇到此问题,然后才能记住这种奇怪的问题-您应该始终对scanf %c保持谨慎,并且需要在它之前添加空格正确读取字符输入。

要使用C语言从用户那里获得单个字符,人们可以使用带有指定符%c scanf()getchar() 这两个函数都从标准输入流中读取一个字符(它们之间的区别是getchar()仅读取一个字符,而scanf()可以读取多种格式)。

但是两者都有相同的陷阱:当用户输入一个字符,然后再按Enter键时。 因此,输入流中实际上有两个字符:输入的字符和换行符。 如果不从输入流中删除换行符,则可能会干扰程序后面的输入功能。 似乎输入被忽略了。

简单的解决方案是scanf(" %c", &ch);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM