c - 在 for 循环中使用 scanf

标签 c

这是我的 C 代码:

int main()
{
    int a;
    for (int i = 0; i < 3; i++)
        scanf("%d ", &a);

    return 0;
}

当我输入1 2 3之类的东西时,它会要求我输入更多,我需要输入的不是' '。

但是,当我将其更改为(或其他不是 ' ' 的东西)

scanf("%d !", &a);

并输入1! 2! 3!,它不会要求更多的输入。

最佳答案

scanf("%d ", &a); 中的最后一个空格指示 scanf 消耗数字后面的所有空格。它将继续从 stdin 读取数据,直到您键入非空格的内容。以这种方式简化格式:

scanf("%d", &a);

scanf 仍然会忽略数字前的空格。

相反,格式 "%d !" 会占用数字后面的所有空格和单个 !。当它得到这个字符或它留在输入流中的另一个非空格字符时,它会停止扫描。您无法从返回值判断它是否与 ! 匹配。

scanf 非常笨拙,很难正确使用它。通常最好使用 fgets() 读取一行输入并使用 sscanf() 或更简单的函数(例如 strtol())解析它>、strspn()strcspn()

关于c - 在 for 循环中使用 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34117773/

相关文章:

c - C 中嵌套结构的用法

在 C 中创建结构体数组?

c++ - 动态分配数组的大小

c - 字符串终止符问题

c - 系统重置后环境值丢失

c - 如何仅使用 sscanf 从字符串中提取所有数字?

c - 如何计算C中相同字符的个数?

c - 将 cstring 作为参数传递,以便它可以被覆盖

c - sprintf 数组中指针的可变数量

c - 如何使用 return 命令而不是 printf 来获得定义的 float 函数的相同输出?