【问题标题】:The program prints unwanted things该程序打印不需要的东西
【发布时间】:2014-02-16 15:13:05
【问题描述】:

为什么下面的程序保存 + 号,偶数循环应该在她看到这个符号时结束。

我的代码-

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

int main()
{
char str[10]= "2+48*46+1";
char str1[10];
int i,j = 0;

for(i = 0; i<10; i++)
{
    if(str[i] == '*')
    {
        while(str1[j-1] != '+' )
        {
            str1[j] = str[i+1];
            i++;
            j++;
        }
    }
}
printf("%s\n",str1);
}

目标清除乘号后的数字到+号。

感谢帮助我告诉我为什么软件保留 + 符号并建议我修复它的方法(:

【问题讨论】:

  • 它没有——打印46
  • 打印 46+ 但我只需要打印 46
  • 我改成了while (str [i]! = '+') 但是还是一样

标签: c string


【解决方案1】:

您访问 str1[-1] 会调用未定义的行为。

您不会空终止str1,因此您也可以在46 之后打印str1 中的任何值。 您将+ 复制到字符串中,这样就会出现,但之后str1 中可能还有其他非零字节。最好不要复制+ 并以空值终止字符串。

j = 0;
while (str[i+j] != '+')
    str1[j++] = str[i+j];
str1[j++] = '\0';
printf("%s\n", str1);

【讨论】:

    【解决方案2】:

    它保留加号,因为当目标字符串的最后一个字符是加号时,您会退出 while 循环。您应该改为测试源字符串 - 类似于

    while(str[i+1] != '+' )
        {
            str1[j++] = str[++i];
        }
    

    【讨论】:

    • 我会通过创建str[++i] 来缩短它,并且以后不需要进行增量。
    • ...或者在分配周围做两个增量:str1[j++] = str[++i]
    • 所以如果它有效,你应该Accept 回答。你的问题已经解决了!
    【解决方案3】:

    您的代码不正确。因为(j-1)可能是负数,str1没有初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2016-03-25
      相关资源
      最近更新 更多