学习电脑 发表于 2016-7-20 13:19:25

c 语言问题

int l;
char ch;

        for (l=0; l>=0; )
        {
      scanf("%s", ch);
                if (ch == "OK")
                        break;
        }


为什么输入 OK不会终止循环?

学习电脑 发表于 2016-7-20 13:28:25

要怎么改进?

人造人 发表于 2016-7-20 13:54:35

要比较字符串,不能直接使用 ==
这里使用 strncmp 比较合适

#include <stdio.h>
#include <string.h>

#define BUFF_SIZE (20)


/*
        只有当输入两个大写字母 OK 时,程序终止

*/

int main(void)
{
        char buff;
       
        while(1)
        {
                fgets(buff, BUFF_SIZE, stdin); // 这里不推荐使用 scanf("%s", buff);
                if(strncmp(buff, "OK", 2) == 0)
                {
                        break;
                }
        }
       
        return 0;
}

学习电脑 发表于 2016-7-20 17:36:02

人造人 发表于 2016-7-20 13:54
要比较字符串,不能直接使用 ==
这里使用 strncmp 比较合适

为什么不能直接比较?

Krant5 发表于 2016-7-20 17:53:23

学习电脑 发表于 2016-7-20 17:36
为什么不能直接比较?

因为字符串的本质是地址存放的值,表示字符串的是地址。你用那两个地址 == ,可能一样吗

弧矢七 发表于 2016-7-21 21:52:19

scanf("%s",&ch)   这句话里不是要加这个的吗    &

陌雨 发表于 2016-7-21 22:10:10

if 改成 if (!strcmp(ch,"ok"))

学习电脑 发表于 2016-7-22 12:31:25

弧矢七 发表于 2016-7-21 21:52
scanf("%s",&ch)   这句话里不是要加这个的吗    &

不用,因为那是数组

学习电脑 发表于 2016-7-22 12:32:06

陌雨 发表于 2016-7-21 22:10
if 改成 if (!strcmp(ch,"ok"))

非0就是1?

陌雨 发表于 2016-7-24 14:14:47

学习电脑 发表于 2016-7-22 12:32
非0就是1?

说明了就是 if括号里面如果是非 就不执行,如果不是非就执行,如果ch==OK 那就不是非 就执行下面句,OK了么?
页: [1]
查看完整版本: c 语言问题