[英]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.