c语言学习日记1(AI助学)
- 当
scanf()
遇到格式化字符串中的%s
时,它会开始读取输入字符串中的字符,直到遇到空格、制表符、换行符等空白字符或者遇到字符串结束符\0
。这意味着,如果用户输入了一个带有空格的字符串,scanf()
函数只会读取空格之前的部分作为字符串,而忽略空格之后的内容。fgets()
可以确保读取整个输入行,而不仅仅是第一个空格之前的部分。 q = p;
只是简单地将指针p
的值赋给指针q
,使它们指向相同的内存地址。这样,q
和p
将指向同一个节点,它们在内存中是共享的。这意味着对于q
或p
的修改都会影响到另一个指针所指向的节点。如果你在操作q
时修改了节点的内容,那么p
也会反映这些修改。而*q = *p;
则是将p
指向的节点的值复制给q
指向的节点。这样,q
和p
指向的是两个不同的节点,它们在内存中是独立的。对于q
或p
的任何修改都不会影响到另一个指针所指向的节点。- 由于输入缓冲区中仍然留有一个换行符
\n
,因此scanf
将会读取这个字符而不是用户输入的Y
或N
。为了解决这个问题,你可以在scanf
格式字符串中添加一个空格,例如scanf(" %c", &ch)
。在这种情况下,scanf
将会跳过任何输入缓冲区中留下的空白字符,包括之前输入的换行符。 - 数组名本身就代表了该数组的地址。因此,在scanf函数中使用字符数组作为参数时,不需要使用取地址符&来获取该数组的地址。