【问题标题】:How can I debug this basic OR program?如何调试这个基本的 OR 程序?
【发布时间】:2017-05-11 13:34:54
【问题描述】:

我是 C 编程的初学者。

我编写了一个由于其“或”功能而无法运行的程序。这是一个工作代码sn-p:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char* englishTest = 'yup';

    if ( (englishTest == 'yup') || (englishTest == 'yep') || (englishTest == 'yas') || (englishTest == 'yah') )
    {
        printf("You may pass \n");
    }
    else
    {
        printf("You shall not pass \n");
    }
    return 0;
}

【问题讨论】:

  • char englishTest = 'yup';...你的编译器没有尖叫?
  • 您正在比较多字符文字,而不是字符串。在此处查看更多信息:stackoverflow.com/questions/28189073/…
  • 语法全错。试试char englishTest[] = "yup"; 等,然后是strcmp(englishTest, "yup") == 0 等。别忘了#include &lt;string.h&gt;
  • @MythicCocoa:启用所有推荐的警告并注意它们!
  • @RushatRai 请不要在问题的标题中添加对其没有影响的内容。即使这是一个糟糕的问题,在标题中添加不必要的文字只会让问题变得更糟。

标签: c


【解决方案1】:

这应该是C,而不是脚本语言。

这段代码有两个问题:

char englishTest = 'yup';

englishTest 被声明为 charC 中是一个整数类型。它只能容纳一个字符,但您尝试在其中存储三个字符。

你的意思可能是:

char englishTest[] = "yup";

请注意表示array (of chars) 的方括号。可以选择在括号之间指定数组大小。这里没有指定,编译器使用可以容纳用于initialization ("yup") 的字符串的最小值。这个最小值是4"yup" 中有3 字符,但C stringsthe NULL character ('\0') 结尾。

代码中的第二个问题是字符串的比较。字符串不是C 中的原始类型。它们是字符数组。使用comparison operators 直接比较两个字符串不会产生您期望的结果。它比较内存中存储两个字符串的地址,而不是它们的字符。

C 标准库提供了几个函数来比较两个字符串。最直接的string comparison functionstrcmp()。如果两个字符串相同,则返回0,如果dictionary order 中的第一个字符串在第二个字符串之前,则返回负值,否则返回负值。

您的比较代码应该是(注意C 字符串用双引号引起来""):

if (strcmp(englishTest, "yup") == 0 || strcmp(englishTest, "yep") == 0 ||
    strcmp(englishTest, "yas") == 0 || strcmp(englishTest, "yah") == 0)


附言OR 运算符 (||) 不会在此处破坏任何内容。

【讨论】:

  • 嗨,谢谢你的回答 :) 当我尝试 char englishTest[ ] = 'yup' 然后代码块告诉我“错误:初始化程序无效”。当我尝试 char* englishTest = 'yup' 时,它起作用了。这可能是什么原因?
  • @MythicCocoa 编译器将向您发出'yup' 的警告 - 请注意它们。
  • @WeatherVane 事实上,确实如此。如果代码有效,我并没有过多考虑这些警告。我已经吸取了教训:)
  • @MythicCocoa “它可以工作”并不能证明,也许是幸运的,在您向客户演示项目的那一刻,这种运气就会耗尽。
猜你喜欢
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 2017-01-21
  • 2015-08-22
  • 1970-01-01
相关资源
最近更新 更多