Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 同时扫描字符和浮点时出现问题_C_Arrays_Types - Fatal编程技术网

C 同时扫描字符和浮点时出现问题

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()未在输入流上定

我正在尝试采用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;i
fflush()
未在输入流上定义,如
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()东西也不起作用