我写了这个函数来从cin中读取一个char数组:
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include "main.h"
int read (char* buffer, int size) {
//read from standart input (with whitespaces)
//cin >> buffer;
cin.get(buffer, size);
cin.ignore(1, '\n');
cout << "cin get buffer: " << buffer << endl;
//if not a correct input
if (!cin.good())
return 0;
cout << "cin.good: " << cin.good() << endl;
//user wants to quit
if (!strcmp (buffer, "end"))
return 0;
return 1;
}
当我第一次在我的主returncode = read (first, MAX)
中调用此功能并输入blabla
时,它会显示&#34; blabla&#34;进入缓冲区。 (我通过cout-for-loop检查)
当我想要读取另一个数组(用于比较),并执行完全相同的事情returncode = read(second, MAX)
时,它只读取&#34; labla&#34;其中second[0]
仍为空。
我的错在哪里?请随意询问其余代码,但我认为错误在此代码段中。
提前谢谢!
ps:我对c ++很陌生,所以请耐心等待我:) pps:这是大学考试,我们不允许使用字符串类..
编辑:一个简单的主要测试上面的
main.cpp中:
#include <iostream>
#include "main.h"
#define MAX 200
using namespace std;
int main () {
char first [MAX] = {0};
char second [MAX] = {0};
cout<<"Please enter the first string to compare: "<<endl;
returncode = read (first, MAX);
cout<<"Please enter the second string to compare: "<<endl;
returncode = read (second, MAX);
switch (strcmp_ign_ws(first, second, MAX)) {
case EQUAL:
cout << "Strings are equal!" << endl;
break;
case SMALLER:
cout << "String 1 is lexically smaller!" << endl;
break;
case BIGGER:
cout << "String 1 ist lexically bigger!" << endl;
break;
}
}
和main.h:
#define EQUAL 0
#define SMALLER -1
#define BIGGER 1
int read (char*, int);
int strcmp_ign_ws (char*, char*, int);
int main ();
编辑2:添加字符串比较忽略空格函数
由于错误似乎不在读取函数中,因此这是第一个和第二个使用两个输入缓冲区的文件:
#include <stdlib.h>
#include <stdio.h>
#include <cstring>
#include <iostream>
#include <ctype.h>
#include "main.h"
using namespace std;
char * rm_ws (char * buffer, const int size) {
int i,j;
char *output=buffer;
for (i = 0, j = 0; i<size; i++,j++)
{
if (buffer[i]!=' ')
output[j]=buffer[i];
else
j--;
}
output[j]=0;
return output;
}
int strcmp_ign_ws (char * first, char * second, int size) {
first = rm_ws(first, size);
second = rm_ws(second, size);
if (strcmp (first, second) == 0)
return EQUAL;
if (strcmp (first, second) < 0)
return SMALLER;
if (strcmp (first, second) > 0)
return BIGGER;
}
}
ps:rm_ws
函数已来自stackoverflow
答案 0 :(得分:0)
你是在Windows或基于Unix的系统上调用它吗?在Unix上它没有那个问题,所以也许它与Windows中的不同行结束有关('\ r \ n'与'\ n')并且你使用
cin.ignore(1, '\n');
不确定这是否是问题,但只是尝试用简单的
替换该行cin.ignore();
答案 1 :(得分:0)
经过几个小时的调试后,我终于得到了答案:
在我的for $subject in $subjects/subject
return
insert-child( <foo/>, $subject)
函数中出现了一个小错误:
而不是rm_ws
,而不是output[j] = 0
,就在return语句之前。
谢谢你的帮助!