我是编程和学习C编程基础知识的新手。我正在学习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
之前添加额外空格,则可以解决行字符问题。
但是当我用char ch
替换int ch
变量时,scanf
会跳过新行。的为什么吗
为什么scanf不像空格一样跳过非空格字符例如-a,b,c,d,@)#etc?
space
中newline
和scanf
字符之间有什么区别?我的意思是会有一些例外吗? 答案 0 :(得分:4)
我的意思是当他们被scanf跳过并且他们不是
时
除非格式说明符为%c
,%n
或%[
,否则将跳过空白字符。 C11标准的相关引用:
7.21.6.2 fscanf功能
[...]
- 跳过输入空白字符(由
醇>isspace
函数指定),除非规范包含[
,c
或n
说明符。 284)
如何跳过它们?
请阅读并弃掉它们。
我也无法理解scanf功能的工作原理?
scanf
是variadic function,意味着它可以使用任意数量的参数,最小值为1。 scanf
解析第一个参数,它是一个字符串文字,因此需要输入。
但是当我用int ch替换char ch变量时,scanf会跳过新行。为什么呢?
第一个答案的第一部分解释了它。 %d
将跳过空格字符。
为什么scanf不像空格一样跳过非空格字符?
对于某些转换说明符,例如%c
,非空白字符是有效输入。他们为什么要跳过它们是没有意义的。对于%d
之类的其他字符,字符(不是数字)是无效输入。 scanf
停止扫描并在看到无效输入时返回。它是这样设计的。
scanf中的空格和换行符有什么区别?
在scanf
中的格式字符串中放置任何内容时没有区别。虽然它们是不同的字符,但它们都被视为whitespace characters。它们跳过任意数量的空白字符,包括无字符,直到第一个非空格字符用于格式字符串scanf
时。 C11标准的相关引用:
7.21.6.2 fscanf功能
[...]
- 由空白字符组成的指令通过读取第一个非空白字符(仍然未读取)的输入来执行,或者直到不再能够读取字符为止。该指令永远不会失败。
醇>