这应该是int,为什么我们要使用%s?

时间:2019-09-17 19:57:42

标签: c string casting cs50

我正在经历CS50练习,但我不理解这段代码。它所做的全部工作都是将一个正整数作为输入,然后是printf。因此,在.to_dict()中,我们将输入保存在main()中。

在下一步int中,我将i作为函数get_positive_int(“字符串提示”)的参数/参数(?)。

为什么是字符串?这怎么可能?我本以为必须使用类型转换才能做到这一点...

请随时纠正我,我迷路了。

int i

2 个答案:

答案 0 :(得分:2)

根据documentationget_int的格式类似于printf。因此,%sprintf的格式字符串,第二个参数(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期望一个类型为stringchar *)的单个参数。

您可以为get_int编写更复杂的提示,例如

i = get_int( "Enter the %d'th name: ", count );

如果count为5,则提示将写为

Enter the 5'th name:

get_int然后调用C的输入函数(fgetsfscanf等)来读取和解析您键入的内容,并确保它是有效的整数。

<无偿之声>

CS50库提取了CI / O和字符串处理的大部分细节,这很好,但是在此过程中,您对于C语言中文本处理的实际情况完全没有准备-比CS50更难的 外观。

一旦您用完CS50,就把它告诉您有关字符串和I / O的所有内容扔掉,并找到一本不错的C参考手册。准备从头开始。