C 为什么按空格键不在数组中放置值? #包括 int main(){ printf(“输入10个数字:”); int a[10],i=0; 对于(i=0;i

C 为什么按空格键不在数组中放置值? #包括 int main(){ printf(“输入10个数字:”); int a[10],i=0; 对于(i=0;i,c,scanf,C,Scanf,当我在每个数组中输入值时,为什么按空格键可以在数组中输入值 例如,当我写入1space2space3space时,每个值都放在每个数组中(a[0]、a[1]、a[2]) 为什么会发生这种情况?当您将scanf()与%d一起使用时,输入流接受整数值,并将其他值视为分隔符 当您对%d使用scanf()时,输入流接受整数值,并将其他值视为分隔符 来自C标准(7.21.6.2 fscanf功能) 12转换说明符及其含义如下: #include <stdio.h> int main(){

当我在每个数组中输入值时,为什么按空格键可以在数组中输入值

例如,当我写入1space2space3space时,每个值都放在每个数组中(a[0]、a[1]、a[2])

为什么会发生这种情况?

当您将scanf()与%d一起使用时,输入流接受整数值,并将其他值视为分隔符

当您对%d使用scanf()时,输入流接受整数值,并将其他值视为分隔符

来自C标准(7.21.6.2 fscanf功能)

12转换说明符及其含义如下:

#include <stdio.h>
int main(){ 
    printf("Enter 10 numbers: ");
    int a[10], i = 0;
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
    }
}
和(7.22.1.4 strtol、strtoll、strtoul和strtoull功能)

  • …首先,他们将输入字符串分解为三个部分:一个初始的、可能为空的空白字符序列(如 由isspace函数指定),类似于 由base的值确定的以某个基数表示的整数,以及 最后一个由一个或多个无法识别的字符组成的字符串,包括 终止输入字符串的空字符。然后,他们试图 将主题序列转换为整数,并返回结果
  • 对于这样的输入

    1
    space
    2
    space
    3
    space
    第一个主题序列是1,第二个主题序列(跳过空白字符后)是2,第三个主题序列是3。它们用于在[0]、[1]和[2]中相应地存储整数,因为每个主题序列代表一个有效整数

    考虑到在一般实现中,对文本流使用所谓的行缓冲

    来自C标准(7.21.3文件)

  • 。。。当一个流被行缓冲时,字符被指定为 当 遇到新行字符
  • 来自C标准(7.21.6.2 fscanf功能)

    12转换说明符及其含义如下:

    #include <stdio.h>
    int main(){ 
        printf("Enter 10 numbers: ");
        int a[10], i = 0;
        for (i = 0; i < 10; i++)
        {
            scanf("%d", &a[i]);
        }
    }
    
    和(7.22.1.4 strtol、strtoll、strtoul和strtoull功能)

  • …首先,他们将输入字符串分解为三个部分:一个初始的、可能为空的空白字符序列(如 由isspace函数指定),类似于 由base的值确定的以某个基数表示的整数,以及 最后一个由一个或多个无法识别的字符组成的字符串,包括 终止输入字符串的空字符。然后,他们试图 将主题序列转换为整数,并返回结果
  • 对于这样的输入

    1
    space
    2
    space
    3
    space
    第一个主题序列是1,第二个主题序列(跳过空白字符后)是2,第三个主题序列是3。它们用于在[0]、[1]和[2]中相应地存储整数,因为每个主题序列代表一个有效整数

    考虑到在一般实现中,对文本流使用所谓的行缓冲

    来自C标准(7.21.3文件)

  • 。。。当一个流被行缓冲时,字符被指定为 当 遇到新行字符


  • 您希望发生什么情况?您是否阅读了scanf()上的规范。例如@jimmm这是一个很棒的游戏!不清楚您是否对(a)标准输入行缓冲如何工作,或(b)格式化输入如何读取跳过空格感到困惑。@jimmm:空格键本身并没有特定的功能,如果使用Tab键或Enter键,您会得到相同的结果。事实上,您在三个数字之间引入了空格,这就
    scanf
    而言,将它们分成了三个独立的输入。您希望发生什么情况呢?您阅读了scanf()上的规范了吗。例如@jimmm这是一个很棒的游戏!不清楚您是否对(a)标准输入行缓冲如何工作,或(b)格式化输入如何读取跳过空格感到困惑。@jimmm:空格键本身并没有特定的功能,如果使用Tab键或Enter键,您会得到相同的结果。事实上,您在三个数字之间引入了空格-这将它们分割成三个独立的输入,就
    scanf
    而言。只有空格是分隔符。空格,制表符,输入。。。所有都是分隔符这些都称为空白。但您的回答听起来好像数字以外的任何字符都是分隔符,这是不正确的。@interjay:从
    %d
    转换说明符的角度来看,任何非十进制数字字符都会标记输入的结束,无论是否为空格。@JohnBode标记输入的结束,是的。但“分隔符”意味着它可以分隔两个不同的值。如果在问题中的程序中输入
    1,2,3,4,5,6,7,8,9,0
    ,它将不起作用。只有空格是分隔符。空格,制表符,输入。。。所有都是分隔符这些都称为空白。但您的回答听起来好像数字以外的任何字符都是分隔符,这是不正确的。@interjay:从
    %d
    转换说明符的角度来看,任何非十进制数字字符都会标记输入的结束,无论是否为空格。@JohnBode标记输入的结束,是的。但“分隔符”意味着它可以分隔两个不同的值。如果你在问题中的程序中输入
    1,2,3,4,5,6,7,8,9,0
    ,它将不起作用。回答不错,我不明白为什么到目前为止我是唯一的投票人。顺便说一句,你不是该找份工作了吗?金融服务业迫切需要有能力的C++开发者。好的答案,我不明白为什么我是迄今为止唯一的支持者。顺便说一句,这不是个好主意吗