删除和添加空格字符真的发生了什么?
我是编程和学习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
space
和newline
什么区别? 我的意思是有一些例外是正确的? 第一个问题
我的意思是他们什么时候跳过scanf,什么时候跳过
除非格式说明符是%c
, %n
或%[
,否则将跳过空格字符。 来自C11标准的相关报价:
7.21.6.2 fscanf函数
[...]
isspace
函数指定)将被跳过,除非规范包含[
, c
或n
说明符。 284) 他们如何被跳过?
只要阅读并丢弃它们。
第二个问题
我无法理解scanf函数的工作吗?
scanf
是一个可变参数函数,这意味着它可以采用任意数量的参数,并且至少有一个参数。 scanf
解析第一个参数,它是一个字符串文字,并相应地接受输入。
第三个问题
但是,当我用int ch替换char ch变量时,scanf跳过新行。 为什么?
第一个答案的第一部分解释它。 %d
将跳过空格字符。
第四个问题
为什么scanf不会像空白一样跳过非空白字符?
对于某些转换说明符(如%c
,非空白字符是有效的输入。 为什么他们应该跳过它们没有意义。 对于其他像%d
,字符(不是数字)是无效输入。 scanf
停止扫描,并在看到无效输入时返回。 它是这样设计的。
第五个问题
scanf中的空格和换行符有什么区别?
当它们中的任何一个被放置在scanf
中的格式字符串中时没有区别。 它们都被认为是空白字符,尽管它们是不同的字符。 它们跳过任何数量的空格字符,包括none,直到在scanf
的格式字符串中使用它们时的第一个非空白字符。 来自C11标准的相关报价:
7.21.6.2 fscanf函数
[...]
上一篇: What is really happening on removing and adding white space characters?
下一篇: Composer update