while(cin>>*Blist[i++]) 有问题吗
时间: 2023-02-05 17:05:19 浏览: 77
这个代码看起来有一些问题。首先请注意,在 C++ 中,`cin` 只能用于输入基本数据类型(如整数、浮点数、字符等),而不能用于输入指针或者数组。所以,`cin>>*Blist[i]` 这个语句是非法的。
此外,在这个代码中,`Blist` 似乎是一个数组指针,但是数组指针是没有办法直接输入的。如果想要输入数组中的某个元素,可以使用下标来引用数组中的某个位置,例如:`cin>>Blist[i][j]`。
总的来说,如果想要输入数组中的某个元素,应该使用数组名加下标的形式来引用数组中的某个位置,然后使用 `cin` 进行输入。
最后,还有一个问题是 `while(cin>>*Blist[i])` 中的条件表达式。`cin>>*Blist[i]` 这个表达式的结果是一个输入流对象,而不是一个布尔值。如果想要使用 `cin` 在循环中输入数据,应该使用 `while(cin>>x)` 这样的形式,其中 `x` 是一个基本数据类型。
相关问题
为什么这一段中间while部分会无限运行不能break出来int main() { int T; T=cin.get();//T是测试用例 static int* Alist = new int[T];//此数组储存迭代次数 vector<int> Blist; cout << "Please input T list" << endl; for (int i = 0; i < T; i++) { int number; while (cin >> number) { Blist.push_back(number); break; } reverse(Blist.begin(), Blist.end()); int* Clist = new int [Blist.size()]; for (int p = 0; p < Blist.size(); p++) { Clist[p] = Blist.back(); Blist.pop_back(); } bubsort<int>(Clist, Blist.size()); Alist[i] = k; k = 0; } for (int i = 0; i < T; i++) { cout << Alist[i] << endl; }
在这段代码中,当用户输入数字时,while循环就会无限运行。这是因为while循环的条件是cin >> number,而cin >> number会一直返回true,因此while循环也会一直运行。
要解决这个问题,可以把while循环的条件设为false,并把break语句放到循环体内。这样,当用户输入数字时,while循环会立即退出。
下面是修改后的代码:
int main() {
int T;
T=cin.get();//T是测试用例
static int* Alist = new int[T];//此数组储存迭代次数
vector<int> Blist;
cout << "Please input T list" << endl;
for (int i = 0; i < T; i++) {
int number;
while (false) {
cin >> number;
Blist.push_back(number);
break;
}
reverse(Blist.begin(), Blist.end());
int* Clist = new int [Blist.size()];
for (int p = 0; p < Blist.size(); p++) {
Clist[p] = Blist.back();
Blist.pop_back();
}
bubsort<int>(Clist, Blist.size());
Alist[i] = k;
k = 0;
}
for (int i = 0; i < T; i++) {
cout << Alist[i] << endl;
}
}
请注意,上述代码仅是一个示例,并不是完整的可运行代码。如果想要运行这段代码,需要添加必要的头文件和函数定义。
完善下列代码,要求如下:本关的编程任务是补全 step1/BSlist.cpp 文件中的BSL_FindKey函数,以实现在已排序的顺序表中查找关键码值为key的结点并返回该结点的编号。当返回值大于等于 0 时则表示找到值为key的结点的编号,若为 -1 则表示没有找到。代码如下: #include <stdio.h> #include <stdlib.h> #include "BSlist.h" BSeqList* BSL_Create(int size){ BSeqList* blist=(BSeqList*)malloc(sizeof(BSeqList)); blist->pkey = (int*)malloc(sizeof(int)*size); blist->max=size; blist->len=0; return blist; } void BSL_Free(BSeqList* blist) { free(blist->pkey); free(blist); } int BSL_FindKey(BSeqList* blist, int key) { } int BSL_InsKey(BSeqList* blist, int key) { } int BSL_DelKey(BSeqList* blist, int key) { } void BSL_Print(BSeqList* blist) { if (blist->len==0) { printf("The list is empty.\n"); return; } printf("The list contains: "); for (int i=0; i<blist->len; i++) { printf("%d ", blist->pkey[i]); } printf("\n"); }
int BSL_FindKey(BSeqList* blist, int key) {
int low = 0, high = blist->len - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (blist->pkey[mid] == key) {
return mid;
} else if (blist->pkey[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
在 BSlist.cpp 文件中补全上面的代码,实现在已排序的顺序表中查找关键码值为 key 的结点并返回该结点的编号。算法采用二分查找,时间复杂度 O(logn)。
阅读全文