我正在经历CS50练习,但我不理解这段代码。它所做的全部工作都是将一个正整数作为输入,然后是printf。因此,在.to_dict()
中,我们将输入保存在main()
中。
在下一步int中,我将i作为函数get_positive_int(“字符串提示”)的参数/参数(?)。
为什么是字符串?这怎么可能?我本以为必须使用类型转换才能做到这一点...
请随时纠正我,我迷路了。
int i
答案 0 :(得分:2)
根据documentation,get_int
的格式类似于printf
。因此,%s
是printf
的格式字符串,第二个参数(prompt
)是%s
打印的字符串。
换句话说,此处的格式字符串仅用于输出。不需要为输入指定格式字符串(例如scanf
),因为该函数已经知道它正在输入int
。
答案 1 :(得分:0)
下一步,将int用作函数get_positive_int(“字符串提示”)的参数/参数(?)。
不完全是。
i
接收从get_positive_int
返回的值。 字符串 "Positive integer"
是get_positive_int
的参数。 get_positive_int
将该字符串(prompt
)传递到get_int
,这实际上是将提示字符串写入标准输出并读取您键入的输入的实际工作。
get_int
显然叫vprintf
。所有*printf
函数都需要一个 format字符串来告诉他们期望有多少个其他参数,它们的类型以及应如何格式化其值以输出。在这种特殊情况下,我们告诉vprintf
期望一个类型为string
(char *
)的单个参数。
您可以为get_int
编写更复杂的提示,例如
i = get_int( "Enter the %d'th name: ", count );
如果count为5
,则提示将写为
Enter the 5'th name:
get_int
然后调用C的输入函数(fgets
,fscanf
等)来读取和解析您键入的内容,并确保它是有效的整数。
<无偿之声>
CS50库提取了CI / O和字符串处理的大部分细节,这很好,但是在此过程中,您对于C语言中文本处理的实际情况完全没有准备-比CS50更难的 外观。
一旦您用完CS50,就把它告诉您有关字符串和I / O的所有内容扔掉,并找到一本不错的C参考手册。准备从头开始。