为什么我的ifdigit故障

时间:2017-03-11 03:24:40

标签: c

有时当我在 fgets()中完全没有输入数字时,仍然符合我的isdigit条件。不会一直发生但很少发生。为什么这样做?这是代码。

    import java.util.Vector;
public class VectorQueue implements QueueInterface
{
  private Vector queue;
  private int frontIndex;
  private int backIndex;

  private boolean initialized=false;
  private static final int DEFAULT_CAPACITY= 50;
  private static final int MAX_CAPACITY= 1000;

  public VectorQueue()
  {
    queue=new Vector<>();
    frontIndex=backIndex=0;

  }
  public void enqueue(T newEntry)
  {
    backIndex++;
    queue.add(backIndex, newEntry);

    if(frontIndex==0)
      frontIndex++;
  }
    public T dequeue()
  {
    if(frontIndex!=0)
    {
      T rEntry=queue.elementAt(frontIndex);
      for (int i =frontIndex;i++)
             queue.add(frontIndex, queue.elementAt(frontIndex+1));
           queue.remove(backIndex);
           backIndex--;
           if(backIndex==0)
             frontIndex=0;
           return rEntry;
    }
    return null;
    }
    public T getFront()
    {
      if(frontIndex!=0)
        return queue.elementAt(frontIndex);
      return null;
    }
    public boolean isEmpty()
    {
      if(backIndex==0)
        return true;
      return false;
    }
    public void clear()
    {
      int index=backIndex;
      for(int i=frontIndex;i<=backIndex;i++)
        queue.removeElementAt(index--);
      frontIndex=backIndex=0;
    }
  }

2 个答案:

答案 0 :(得分:1)

你没有初始化你的item_name数组,可能只是遇到可能存储在那里的垃圾,特别是当你没有检查存储字符串的长度而你的for循环遍及整个数组长度。

答案 1 :(得分:0)

如前所述,item_name将包含未被fgets()触及的部分的垃圾。

是好的
  

fgets(item_name,20,stdin);

然后检查错误(来自fgets的结果)。在那之后,你的周期:

  

for(i = 0; i&lt; 20; i ++){

检查始终 20个字符,但fgets()读取的内容可能更少。 fgets()总是用NUL终止缓冲区(也可能是之前的LF)。您可以通过在循环中设置受控中断来避免检查长度。也许一个空字符串对你来说没问题,也许不是,但这个循环:

for(i=0; i<20; i++) {
  if ( item_name[i] == 0 ) break;  // NUL - always present
  if ( item_name[i] == 10) break;  // LF - do you want to manage it?

  if (isdigit(item_name[i])) {
    Errorlevel("Input Has a Number");
  }
}

我认为,你可能不希望LF在字符串中;如果是这样,你可以用NUL覆盖它。