实际上我正在尝试将字符串与2d数组进行比较。如果输入的字符串已经存在于数组中,程序应该终止。如果字符串不存在则应该存储在下一行数组中。 这段代码正在做的是它没有告诉输入的" cnic"以前是否输入过。我正在使用Turbo C ++ 3.0编译器,所以请记住这一点。
此程序实际上是用户的cnic,并检查之前是否输入过cnic。
这是我的计划
cout<<"\nEnter Your CNIC?\n";
gets(cnic);
**for (i=0;i<=13;i++)
{
if (strcmp(cnic,cnic2)==0)
{
cout<<"This Cnic has already casted the vote";
}
}
cnic2[i][j]=cnic[i];
j++;**
答案 0 :(得分:0)
我使用的是Turbo C(甚至不是++),但很久很久以前......更严重的是,我认为:
cnic
是一个大小为13的字符数组(12 +终止为空)cnic2
应该是一个包含100个大小为13的char数组的2D数组(它不是代码中写的)cnic
C字符串是否已在cnic2
中,如果您拒绝它,如果不是,则添加它。j
是cnic2
中下一个元素的索引,应该在主循环之前明确地设置为0。宣言:
char cnic2[100][13];
int found; /* should be bool found but unsure if Turbo C++ knows about that */
(你的代码声明了一个13 C-Ctring,大小为100的数组)
测试循环(包括OP审查和测试的代码):
/* should control size of nic before that processing - I ASSUME IT HAS BEEN DONE */
found = 0; /* should be found = false; and later use false and true instead of 0 and 1 */
for(i=0; i<j; i++) {
if (0 == strcmp(cnic, cnic2[i]) {
found = 1;
break;
}
}
if (found) {
cout<<"This Cnic has already casted the vote";
continue;
}
if (j == 99) {
count << "Too much Cnic already";
break;
}
strcpy(cnic2[j++], cnic);
/* Revised and Working Code
found = 0; /* should be found = false; and later use false and true instead of 0 and 1 */
for(i=0; i<j; i++) {
if (0 == strcmp(cnic, cnic2[i]))
{
found = 1;
break;
}
}
if (found) {
cout<<"This Cnic has already casted the vote";
continue;
}
if (j == 99) {
cout << "Too much Cnic already";
break;
}
strcpy(cnic2[j++], cnic);
答案 1 :(得分:0)
专注于您使用**
标记的代码。错误编号如下:
for (i=0;i<=13;i++) // (1)
{
if (strcmp(cnic,cnic2)==0) // (2)
{
cout<<"This Cnic has already casted the vote";
}
}
cnic2[i][j]=cnic[i]; // (3)
对于错误(1)
,您循环次数过多。您希望从0循环到12,或使用< 13
,而不是<= 13
。
对于错误(2)
,strcmp()
的第二个参数是错误的。您想要比较从cnic2[j]
开始的字符串。
对于错误(3)
,您正在访问两个数组的超出范围的元素,因为i
将为13。
我不会为您解决这些问题,因为您的代码会做得更多。我的答案指出显然是错误的。