我理解当我使用getchar()
,putchar()
和while循环更明确地执行此操作时发生的情况;但是,我只是想知道在执行下面的代码(幕后)时输入字符串的存储和处理是否相同?每个字符是否都存储为“键入”数组的一个元素? scanf
如何做到这一点?等
#include <stdio.h>
int main(void)
{
char typed[500];
scanf("%[^\tEOF]", &typed);
printf("%s", typed);
return(0);
}
感谢。
答案 0 :(得分:3)
是的,每个字符都存储为数组typed
的一个元素。
请注意,您的扫描字符串会查找除标签,“E”,“O”或“F”以外的任何内容;模式中的“EOF”与EOF
等人在文件末尾返回的getchar()
无关。此外,您的代码容易受到缓冲区溢出的影响(因此来自knittl的简洁注释),因为您没有在格式字符串中指定缓冲区的大小。你会更安全:
scanf("%499[^\tEOF]", &typed);
此外,main()
的返回类型为int
,而不是void
。
答案 1 :(得分:1)
每个元素都保存为数组元素。当变量已经是数组时,不应该使用&
。数组名称已经是地址。
getchar()
具有默认分隔符:return键并将输入仅作为字符
虽然scanf
通过指定格式允许各种类型的输入:%s
,%d
等
您还可以为scanf
指定分隔符(默认为空格,制表符,输入)
在您的情况下,分隔符被指定为制表符或EOF
。