c语言中的简单问题 有没有愿意看看的

img

如图 为什么first可以表示为第一个输入的字符呢 难道==1表示为第一位?

first是个标志量,在循环外定义的时候设置为1
那么在循环内如果first等于1,说明是第一个数。因为接着就将first设置为0了
当接收到第二个数时,判断first就已经是0,不是1了,说明不是第一个数了。这样确保first==1是第一个数,可以进行相应的处理

因为你要在字符间加“-”号,因此第一个字符前是不需要加的。他多设置了一个变量来做这件事,first = 1,2,3,4,5,6都无所谓,只是判断下是不是第一个字符而已。其实完全没必要,直接用k==1来判断也是一样的。

你理解的不错 ==1 就代表的是真,但是你还有理解 == 0就代表假
第一次==1,if判断是真的,但是被赋值为0 了 啊,这时候first的值是就是0了,所以除了第一个输入的数外,first的值都是0,first == 1那可不就代表处理第一个数了吗

first==1 表示第一次输入字符 而不是表示为第一位
下面还有 first=0

不需要看代码,理解逻辑。
他逻辑为,输入“abc”,输出"a-b-c"
所以这个代码的想法是,第一字符直接输出,非第一字符加个前缀。至于你纠结的要不要弄个first变量,其实无所谓。你能实现怎么都行

就像你说 如果写成 if(k==1)也一样。当然我们无所谓纠结书上的例子,这玩意只要能正确实现,无所谓书上怎么写

所以如果想法是“-a-b-c”,然后在限制第一个不给-呢?

if(k>1)  putchar('-')
putchar(ch)

这样的逻辑也行,这个代码也正确,到不在乎书上怎么写,理解正确,逻辑正确,结果正确,怎么写都成。

当然这是我们告诉你的,至于书上把,你最上面的标题是分支结构,他要表达的是if else分支,在乎状态转移,所以他给了个状态变量,但是代码不是核心,核心是理解if else条件状态