c - 以下 C 代码输出错误

标签 c scanf

#include <stdio.h>

int main(){
    int l,m,q,j;
    char option;
    scanf("%d",&q);
    printf("%d\n",q);
    for(j=0;j<q;j++){
        scanf("%c %d %d",&option,&l,&m);
        printf("%c %d %d",option,l,m);
    }
    return 0;
}

输出:

3(Input)
3
C 1 4(Input)

 0 -374066224C 1 4

上面的代码有什么问题吗?它没有给出预期的输出。

最佳答案

初始 scanf()(以及后续 scanf())的输入流中仍然有一个换行符:这将被分配给 option 和后续的 int 赋值将失败,因为 C 不是 int,这意味着 lm 是未初始化的 int 变量。

要跳过它,请在 for 循环内的 scanf() 格式说明符中添加前导空格字符:

scanf(" %c %d %d",&option,&l,&m);
    /* ^ */

scanf() 的返回值是成功分配的次数:检查它以确保进行 3 次分配。

if (3 == scanf(" %c %d %d",&option,&l,&m))
{
    /* Valid input. */
}

关于c - 以下 C 代码输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11902467/

相关文章:

c - 为什么不打印连字符 (-)?

c - 在 while 循环中使用 scanf 读取带有空格的用户输入?

c - "lvalue required in asm statement"错误

c - 将单行用户输入分配给 C/CH 中的多维数组

c - 这两种解决方案有什么区别?

java - 错误: Connection refused when connecting to socket server

c - scanf ("%[^\n]%*c", …) 在循环中

c - do-while 循环中的 scanf() 会导致无限循环,即使测试输入也是如此

c - 搜索元素的有效方法

c - 如何为我的程序获取 "execution time for each line of code"?