删除和添加空格字符真的发生了什么?

我是编程和学习C编程基础的新手。 我正在学习scanf()工作方式,但我现在觉得我非常困惑,真的不知道如何以及要问什么。 但我会尽我所能把我的问题清楚。

问题

  • 我真的不能理解空白的整个概念。 我的意思是当他们跳过scanf时,他们什么时候没有,也是最大的问题: 他们如何被跳过?
  • 除了空白概念,我还无法理解scanf函数的工作scanf吗? 我曾在很多书籍和网站以及本网站上阅读过这方面的内容,但它让我更加困惑,因为每个人都有自己的方式来讲述任何概念,而且每个概念都各不相同。

  • 看看这个简短的程序:

    #include<stdio.h>
    int main()
     {
      int num;
      char ch;
      printf("enter the value of num and ch:n");
      scanf("%d",&num);      
      scanf("%c",&ch);
       printf("num = %d and ch = %c",num,ch);
       return 0;
    }
    

    我知道在这个程序中,用户将被允许输入num的值,因为留在输入缓冲区中的新行字符,并且下一次scanf将输入新的行字符,但是如果我们添加额外的空间可以解决在第二个scanf函数中%c之前。

    但是,当我用int ch替换char ch变量时, scanf跳过新行。 为什么?

  • 为什么scanf不会像空白字符一样跳过非空白字符例如 - a,b,c,d,@)#etc?

  • scanf spacenewline什么区别? 我的意思是有一些例外是正确的?

  • 第一个问题

    我的意思是他们什么时候跳过scanf,什么时候跳过

    除非格式说明符是%c%n%[ ,否则将跳过空格字符。 来自C11标准的相关报价:

    7.21.6.2 fscanf函数

    [...]

  • 输入空白字符(由isspace函数指定)将被跳过,除非规范包含[cn说明符。 284)
  • 他们如何被跳过?

    只要阅读并丢弃它们。

    第二个问题

    我无法理解scanf函数的工作吗?

    scanf是一个可变参数函数,这意味着它可以采用任意数量的参数,并且至少有一个参数。 scanf解析第一个参数,它是一个字符串文字,并相应地接受输入。

    第三个问题

    但是,当我用int ch替换char ch变量时,scanf跳过新行。 为什么?

    第一个答案的第一部分解释它。 %d将跳过空格字符。

    第四个问题

    为什么scanf不会像空白一样跳过非空白字符?

    对于某些转换说明符(如%c ,非空白字符是有效的输入。 为什么他们应该跳过它们没有意义。 对于其他像%d ,字符(不是数字)是无效输入。 scanf停止扫描,并在看到无效输入时返回。 它是这样设计的。

    第五个问题

    scanf中的空格和换行符有什么区别?

    当它们中的任何一个被放置在scanf中的格式字符串中时没有区别。 它们都被认为是空白字符,尽管它们是不同的字符。 它们跳过任何数量的空格字符,包括none,直到在scanf的格式字符串中使用它们时的第一个非空白字符。 来自C11标准的相关报价:

    7.21.6.2 fscanf函数

    [...]

  • 一个由空格字符组成的指令通过读取输入直到第一个非空白字符(它仍然是未读)或者直到不再能够读取字符来执行。 该指令永远不会失败。
  • 链接地址: http://www.djcxy.com/p/85379.html

    上一篇: What is really happening on removing and adding white space characters?

    下一篇: Composer update