#include <iostream>
#include <string>
using namespace std;
int main() {
string userInput;
int stringSize = 0;
userInput = "Hello";
userInput.size() == stringSize;
cout << "Size of userInput: " << stringSize << endl;
return 0;
}
我试图获得5的输出,但它返回0.我无法弄清楚出了什么问题。 userInput
“Hello”的大小应为5,userInput.size()
应返回5.这应该分配给变量stringSize。旁注,任何人都可以向我解释为什么它是“==”而不是“=”?如果我用“=”尝试它,它不会编译,我得到这个错误:
main.cpp: In function ‘int main()’:
main.cpp:11:23: error: lvalue required as left operand of assignment
userInput.size() = stringSize;
^~~~~~~~~~
我的理解是“=”是赋值,“==”是布尔比较,它是“真”或“假”,取决于双方是否相等。我试图将userInput.size()
的大小分配给变量,所以我认为我应该使用“=”。也许这是问题的一部分?
答案 0 :(得分:2)
以下是要求的答案(PacO的学分):
您始终必须将要分配的值放在=
- 运算符右侧的变量中,并将变量本身放在左侧。
您所做的是尝试将stringSize
的值分配给userInput.size()
答案 1 :(得分:2)
我的理解是“=”是赋值,“==”是一个布尔比较 这是“真”还是“假”,取决于双方是否相等。
到目前为止,您的理解是正确的。
我正在尝试将userInput.size()的大小分配给变量 所以我认为我应该使用“=”
一般来说,你不能写private static void piePiece(GraphicsContext context, double width, double height, double radius, double angle) {
double cx = width / 2;
double cy = height / 2;
context.moveTo(cx, cy);
context.lineTo(cx + radius, cy);
context.arc(cx, cy, radius, radius, 0, angle);
context.closePath();
}
@Override
public void start(Stage primaryStage) {
Canvas canvas = new Canvas(600, 600);
GraphicsContext gc = canvas.getGraphicsContext2D();
// rotation matrix rotating by 30° around (300, 300)
Affine rotate = new Affine(new Rotate(30, 300, 300));
// draw first pie
gc.beginPath();
piePiece(gc, 600, 600, 250, 30);
gc.stroke();
gc.save();
// create clip
gc.beginPath();
piePiece(gc, 600, 600, 250, 30);
gc.clip();
List<List<Point2D>> points = new ArrayList<>();
Button btn = new Button("Complete");
btn.setOnAction((ActionEvent event) -> {
// draw data stored in points variable
// remove old clip
gc.restore();
for (int i = 30; i < 360; i += 30) {
// rotate by 30°
gc.transform(rotate);
gc.save();
// draw piece
gc.beginPath();
piePiece(gc, 600, 600, 250, 30);
gc.stroke();
// create clip
gc.beginPath();
piePiece(gc, 600, 600, 250, 30);
gc.clip();
// draw lines
for (List<Point2D> lines : points) {
if (lines.size() >= 2) {
Iterator<Point2D> iter = lines.iterator();
gc.beginPath();
Point2D p = iter.next();
gc.moveTo(p.getX(), p.getY());
while (iter.hasNext()) {
p = iter.next();
gc.lineTo(p.getX(), p.getY());
}
gc.stroke();
}
}
// remove clip
gc.restore();
}
});
class PressedHandler implements EventHandler<MouseEvent> {
List<Point2D> line;
@Override
public void handle(MouseEvent event) {
if (line == null) {
// add new line to lines list
line = new ArrayList<>();
line.add(new Point2D(event.getX(), event.getY()));
points.add(line);
gc.beginPath();
gc.moveTo(event.getX(), event.getY());
}
}
}
PressedHandler handler = new PressedHandler();
canvas.setOnMousePressed(handler);
canvas.setOnMouseDragged(event -> {
if (handler.line != null) {
// append point to line
handler.line.add(new Point2D(event.getX(), event.getY()));
gc.lineTo(event.getX(), event.getY());
}
});
canvas.setOnMouseReleased(event -> {
// complete line
handler.line = null;
gc.stroke();
});
VBox root = new VBox(btn, canvas);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
。 分配中的左右不可交换,顺序很重要。
如果要为某个变量指定值,则该变量必须位于作业的左侧:5 = variable
。
我使用了这种简化,但函数size()的结果与我的示例中的5相似。这称为 rvalue (如“right-value”)。
因此,在您的情况下,variable = 5
是正确的,并将stringSize = userInput.size();
的大小设置为变量userInput
(称为左值值可以在作业的左侧分配。
答案 2 :(得分:1)
左值可以看作是在其使用之后存在的命名值,例如变量。 rvalue不会在其使用之后持续存在,通常是函数调用的结果或者我们通常称之为“值”的结果。
您可以将左值存储在左值(int i = 2 + 3
)中,但不能将左值分配给右值。这就是你的问题存在的地方
编译器抛出一个错误,因为你有一个右值userInput.size()
并且你通过尝试为它赋值来将它视为左值。
userInput.size() = stringSize
一个更简单的例子是
int n = 1;
3 = n;
出于显而易见的原因,你不能只改变3是什么。在您的示例中,您的函数只返回一个整数值...那么为什么您应该更改它?所以你得到一个错误
答案 3 :(得分:0)
不同的观点:
您无法设置字符串的大小。 std::string
类会自动为您计算长度。
所以不需要表达式:
userInput.size() = stringSize;
要清除std::string
的内容,请使用clear()
方法:
userInput.clear();
答案 4 :(得分:0)
=
是C,C ++和其他编程语言中的赋值运算符。
==
指定右侧表达式或变量的值 值为左侧变量。
简单示例:
int x,y;
x=10;
y=10;
if(x==y)
printf("True");
else
printf("False");
输出将是:True
在您的情况下,您必须使用一个=
运算符并将函数赋值放在变量的右侧。像这样stringSize = userInput.size();
这是最终代码:
#include <iostream>
using namespace std;
int main()
{
string userInput;
int stringSize = 0;
userInput = "Hello";
stringSize = userInput.size(); //this line edited.
cout << "Size of userInput: " << stringSize << endl;
return 0;
}