C 同时扫描字符和浮点时出现问题
我正在尝试采用5个字符和5个浮点输入C 同时扫描字符和浮点时出现问题,c,arrays,types,C,Arrays,Types,我正在尝试采用5个字符和5个浮点输入 main() { char c[5]; float q[5]; int i; for(i=0;i<5;i++) { printf("\n%d ",i); scanf("%c",c+i); scanf("%f",q+i); } } main() { charc[5]; 浮点数q[5]; int i; for(i=0;ifflush()未在输入流上定
main()
{
char c[5];
float q[5];
int i;
for(i=0;i<5;i++)
{
printf("\n%d ",i);
scanf("%c",c+i);
scanf("%f",q+i);
}
}
main()
{
charc[5];
浮点数q[5];
int i;
for(i=0;ifflush()
未在输入流上定义,如stdin
。不要这样做
如果要“在换行前读取并丢弃”,请执行以下操作:
int ch;
do {
ch = getchar();
} while (ch != EOF && ch != '\n');
请注意,%c
表示“读取输入流中的下一个字符,即使是空白,也要停止”。%f
表示“读取并丢弃空白,然后尝试从输入流中读取浮点,然后停止。”fflush()
不是在输入流上定义的,如stdin
。不要这样做
如果要“在换行前读取并丢弃”,请执行以下操作:
int ch;
do {
ch = getchar();
} while (ch != EOF && ch != '\n');
请注意,%c
表示“读取输入流中的下一个字符,即使它是空白,也要停止”。%f
表示“读取并丢弃空白,然后尝试从输入流中读取浮点,然后停止。”因为类似的问题
改为使用fgets
读取整行,然后使用sscanf
从刚刚读取的行中提取所需内容(字符char
或浮动float
):
char line[MAX];
for(i=0;i<5;i++)
{
if( fgets(line,MAX,stdin) && sscanf(line,"%c", c+i)!=1 )
*(c+i) = 0;
if( fgets(line,MAX,stdin) && sscanf(line,"%f", q+i)!=1 )
*(q+i) = 0.0;
printf("%c %f\n",*(c+i),*(q+i));
}
字符行[MAX];
对于(i=0;i,因为这样的问题
改为使用fgets
读取整行,然后使用sscanf
从刚刚读取的行中提取所需内容(字符char
或浮动float
):
char line[MAX];
for(i=0;i<5;i++)
{
if( fgets(line,MAX,stdin) && sscanf(line,"%c", c+i)!=1 )
*(c+i) = 0;
if( fgets(line,MAX,stdin) && sscanf(line,"%f", q+i)!=1 )
*(q+i) = 0.0;
printf("%c %f\n",*(c+i),*(q+i));
}
字符行[MAX];
(i=0;i要直接回答第三次扫描和每隔一次扫描“跳过”的原因,这是scanf()
和%c
格式的工作方式。当调用scanf()
时,通常必须按enter键“提交”输入。因此,在stdin
流中插入换行符
当输入上一个浮点扫描时,换行符仍保留在流中。当到达字符扫描时,剩余的换行符将被读入,因为它可以有效地“跳过”调用
您应该按照codaddict的建议,将fgets()
与sscanf()一起使用
但作为一个快速修复,您可以尝试在浮点扫描之后添加对getchar()
的调用,以使用流中的换行符
编辑:
您是说这不起作用?(假设您输入了正确类型的值,每个scanf调用一个)
main()
{
charc[5];
浮点数q[5];
int i;
(i=0;i要直接回答第三次扫描和每隔一次扫描“跳过”的原因,这是scanf()
和%c
格式的工作方式。当调用scanf()
时,通常必须按enter键“提交”输入。因此,在stdin
流中插入换行符
当输入上一个浮点扫描时,换行符仍保留在流中。当到达字符扫描时,剩余的换行符将被读入,因为它可以有效地“跳过”调用
您应该按照codaddict的建议,将fgets()
与sscanf()一起使用
但作为一个快速修复,您可以尝试在浮点扫描之后添加对getchar()
的调用,以使用流中的换行符
编辑:
您是说这不起作用?(假设您输入了正确类型的值,每个scanf调用一个)
main()
{
charc[5];
浮点数q[5];
int i;
对于(i=0;i您的代码应该如下所示:
main()
{
char c[5];
float q[5];
int i;
for(i=0;i<5;i++)
{
printf("\n%d ",i);
scanf("%c",c+i);
while (getchar()!='\n');
scanf("%f",q+i);
while (getchar()!='\n');
}
}
main()
{
charc[5];
浮点数q[5];
int i;
对于(i=0;i您的代码应该如下所示:
main()
{
char c[5];
float q[5];
int i;
for(i=0;i<5;i++)
{
printf("\n%d ",i);
scanf("%c",c+i);
while (getchar()!='\n');
scanf("%f",q+i);
while (getchar()!='\n');
}
}
main()
{
charc[5];
浮点数q[5];
int i;
对于(i=0;i在浮点值之后扫描字符值的问题
解决方案非常简单!!!
而不是像这样编写代码
scanf("%c",&...)
试试这个
scanf(" %c",&...)
键入浮点值作为输入后按下时,“%c”前面的空格将通过忽略返回(Enter)键的值来解决问题
在字符值之前扫描浮点值时。
按下返回(Enter)键获得的值收集在以下char变量中。在(“%c”,&…)之前使用空格丢弃返回(Enter)键收集的值,导致在下一行扫描char值。从而解决了扫描浮点字符的问题。
在浮点值之后扫描字符值时出现问题
解决方案非常简单!!!
而不是像这样编写代码
scanf("%c",&...)
试试这个
scanf(" %c",&...)
键入浮点值作为输入后按下时,“%c”前面的空格将通过忽略返回(Enter)键的值来解决问题
在字符值之前扫描浮点值时。
按下返回(Enter)键获得的值收集在以下char变量中。在(“%c”,&…)之前使用空格丢弃返回(Enter)键收集的值,导致在下一行扫描char值。从而解决了扫描浮点字符的问题。
你应该试试这个:
int main(){
char c[6];//char array size must be 6 to store five charecter
//as null-terminator('\0')will use the last one
float q[5];
int i;
for(i=0;i<5;i++){
printf("\n%d\n",i);fflush(stdout);
scanf("%c",&c[i]);fflush(stdin);//fflush(stdin) to clear input stream that
//next scanf() won't skip
scanf("%f",&q[i]);fflush(stdin);//fflush(stdin) to clear input stream that
//scanf() won't skip at new loop
}
return 0;
}
intmain(){
字符c[6];//字符数组大小必须为6才能存储五个字符
//因为null终止符('\0')将使用最后一个
浮点数q[5];
int i;
对于(i=0;i您应该尝试以下方法:
int main(){
char c[6];//char array size must be 6 to store five charecter
//as null-terminator('\0')will use the last one
float q[5];
int i;
for(i=0;i<5;i++){
printf("\n%d\n",i);fflush(stdout);
scanf("%c",&c[i]);fflush(stdin);//fflush(stdin) to clear input stream that
//next scanf() won't skip
scanf("%f",&q[i]);fflush(stdin);//fflush(stdin) to clear input stream that
//scanf() won't skip at new loop
}
return 0;
}
intmain(){
字符c[6];//字符数组大小必须为6才能存储五个字符
//因为null终止符('\0')将使用最后一个
浮点数q[5];
int i;
对于(i=0;我找不到我的代码出现这种行为的原因。你能给我解释一下吗?我找不到我的代码出现这种行为的原因。你能给我解释一下吗?甚至getchar()东西都不起作用。我甚至使用了fflush(stdin),但结果仍然是一样的。即使getchar()东西也不起作用