【问题标题】:Output does not match strcmp() function in c输出与 c 中的 strcmp() 函数不匹配
【发布时间】:2016-04-25 15:13:25
【问题描述】:

为了通过strcmp() 函数比较两个字符串,我通过fgets()cin 获取一个输入字符串,另一个在函数中作为默认参数给出。但是当我通过strcmp() 比较它们时,函数输出不匹配。

    char a[20];
    int b;
    cin>>a;
    b=strcmp(a,"ab");
    cout<<b;

我将输入a 设为abb 的值为0,这完全没问题。但是当fgets() 采用相同的输入时,strcmp() 的输出与以前不同.

char a[20];
    int b;
    fgets(a,sizeof(a),stdin);
    b=strcmp(a,"ab");
    cout<<b;

其中a 的值为abb 的值为1。为什么?是编译器问题还是其他问题?

【问题讨论】:

  • 不是编译器问题。问题是您没有更仔细地阅读文档。 The fgets function docs。你认为第二个参数有什么作用?
  • fgetscin&gt;&gt;a 不会产生相同的字符串。请阅读 both 的文档以更好地了解它们的作用。
  • @PaulMcKenzie as str 将包含该换行符,因此它的值为 1。对吗?
  • @FahimFerojeAlJami - 是的,新行没有被剥离。其次,如果您编写一个循环并将a 中的每个字符输出为整数:for (int i = 0; i &lt; strlen(a) ++i) cout &lt;&lt; static_cast&lt;int&gt;(a[i]) &lt;&lt; "\n";,您可能会自己发现这一点,然后您会看到末尾有一个不可见的控制字符。如果有一些你没有预料到的事情,那应该是你的第一步,那就是看看组成 a 字符串的字符是什么。
  • @PaulMcKenzie 谢谢。我明白了。

标签: c++ fgets cin strcmp


【解决方案1】:

fgets() 不删除任何换行符,每节 7.21.7.2 fgets the C standard的函数

fgets 函数最多读取比 n 指定的字符来自stream 指向的流 进入 s 指向的数组。没有额外的字符被读取 在换行符(保留)之后或文件结尾之后。 在读取最后一个字符后立即写入空字符 进入数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2021-11-19
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多