有时当我在 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;
}
}
答案 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覆盖它。