#include
struct test{
char name[5];
}abc; // declares a variable
void main(){
puts(“enter name: “);
// scanf(“%[^\n]”, abc.name);
// scanf(“%a[^\n]”, abc.name);//’a’ co the co lon so phan tu khai bao trong mang name[5]
// gets(abc.name);
printf(“\n%s”, abc.name);
=>> Vay tai sao minh khai bao mang chua co 5 phan tu ma no co the doc den dau [^\n] doi voi scanf
va gets cung co the doc vao lon hon 5 phan tu luc khai bao??
Mặc định của gets() là đọc đến hết dòng và scanf() đọc đến khoảng trắng đầu tiên nó gán vào mảng kết quả. e dùng công cụ visual studio sẽ thấy nó báo lỗi. Đây là lí do scanf_s() ra đời và gets() thì đã không còn được sử dụng ở các phiên bản C mới hơn
Nó đọc hết dòng vạy mình khai báo vd: name[10];
Là vô nghĩa ha a? scanf(“%[^\n]”,…); cũng công dụng như gets.
Em thi codeblocks nên em phải chạy bằng codeblocks cho quen a ơi, 🤧🤧
Bài 34 có nói vấn đề này rồi e. Nếu e logic cũng tự thấy là nó logic từ đầu đến cuối. Cố đổ thêm nước vào bình khi đã đầy thì sao mà đổ được nữa. Lý do a dùng visual studio là để các bạn học biết là một số công cụ cùi bắp khác nó không phát hiện ra điều này để mà tránh và hợp chuẩn logic với các ngôn ngữ khác. Và đó cũng là lý do tại sao trong các bài giải và bài mẫu a chỉ dùng dạng scanf(“%N[^\n]”, str); chứ KHÔNG dùng gets hay scanf với %s để đọc cả dòng.
Thân Triệu ! anh nay 60 tuổi rồi, nhưng anh thích mấy đồ điện tử. anh thấy người ta thực hành mấy board arduino hay quá. Nhưng phải biết lập trình cho nó. Nên anh đã cố gắng học cho được lập trình C. May nhờ có em giảng dạy rất dể hiểu ngắn gọn xúc tích đầy đủ có logic và đầy nhiệt tâm nên anh học rất mau biết. Hồi còn sinh viên anh chỉ học FORTRAN đến giờ mới học lập trình lại. Anh đã thông hiểu lý thuyết hết rồi nhưng anh làm bài tập rất ít BỞI VÌ anh mê arduino nên lập trình cho nó.
Anh muốn hỏi em , còn 1 tuần nửa hết khóa học mà còn 2 phần chưa học hết: Kiểu dử liệu struct &thao tác với file. Anh có được gia hạn thêm vài tuần không?
Còn bài làm tốt nghiệp thì cho anh được miển nhe ? Anh lậptrình ardui được là anh thỏa mản rồi .
Sau cùng anh thành thật cám ơn em chúc em nhiều sức khỏe và có nhiều học viên
// Motor A
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B
int enB = 3;
int in3 = 5;
int in4 = 4;
// Joystick Input
int joyVert = A0; // Vertical
int joyHorz = A1; // Horizontal
// Motor Speed Values – Start at zero
int MotorSpeed1 = 0;
int MotorSpeed2 = 0;
// Joystick Values – Start at 512 (middle position)
12 Comments
A cho em hoi lai phan nay voi anh:
#include
struct test{
char name[5];
}abc; // declares a variable
void main(){
puts(“enter name: “);
// scanf(“%[^\n]”, abc.name);
// scanf(“%a[^\n]”, abc.name);//’a’ co the co lon so phan tu khai bao trong mang name[5]
// gets(abc.name);
printf(“\n%s”, abc.name);
=>> Vay tai sao minh khai bao mang chua co 5 phan tu ma no co the doc den dau [^\n] doi voi scanf
va gets cung co the doc vao lon hon 5 phan tu luc khai bao??
Mặc định của gets() là đọc đến hết dòng và scanf() đọc đến khoảng trắng đầu tiên nó gán vào mảng kết quả. e dùng công cụ visual studio sẽ thấy nó báo lỗi. Đây là lí do scanf_s() ra đời và gets() thì đã không còn được sử dụng ở các phiên bản C mới hơn
Nó đọc hết dòng vạy mình khai báo vd: name[10];
Là vô nghĩa ha a? scanf(“%[^\n]”,…); cũng công dụng như gets.
Em thi codeblocks nên em phải chạy bằng codeblocks cho quen a ơi, 🤧🤧
Bài 34 có nói vấn đề này rồi e. Nếu e logic cũng tự thấy là nó logic từ đầu đến cuối. Cố đổ thêm nước vào bình khi đã đầy thì sao mà đổ được nữa. Lý do a dùng visual studio là để các bạn học biết là một số công cụ cùi bắp khác nó không phát hiện ra điều này để mà tránh và hợp chuẩn logic với các ngôn ngữ khác. Và đó cũng là lý do tại sao trong các bài giải và bài mẫu a chỉ dùng dạng scanf(“%N[^\n]”, str); chứ KHÔNG dùng gets hay scanf với %s để đọc cả dòng.
Em cám ơn Anh vì những giải thích thêm. e ok rồi anh ơi!
okok
Thân Triệu ! anh nay 60 tuổi rồi, nhưng anh thích mấy đồ điện tử. anh thấy người ta thực hành mấy board arduino hay quá. Nhưng phải biết lập trình cho nó. Nên anh đã cố gắng học cho được lập trình C. May nhờ có em giảng dạy rất dể hiểu ngắn gọn xúc tích đầy đủ có logic và đầy nhiệt tâm nên anh học rất mau biết. Hồi còn sinh viên anh chỉ học FORTRAN đến giờ mới học lập trình lại. Anh đã thông hiểu lý thuyết hết rồi nhưng anh làm bài tập rất ít BỞI VÌ anh mê arduino nên lập trình cho nó.
Anh muốn hỏi em , còn 1 tuần nửa hết khóa học mà còn 2 phần chưa học hết: Kiểu dử liệu struct &thao tác với file. Anh có được gia hạn thêm vài tuần không?
Còn bài làm tốt nghiệp thì cho anh được miển nhe ? Anh lậptrình ardui được là anh thỏa mản rồi .
Sau cùng anh thành thật cám ơn em chúc em nhiều sức khỏe và có nhiều học viên
// Motor A
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B
int enB = 3;
int in3 = 5;
int in4 = 4;
// Joystick Input
int joyVert = A0; // Vertical
int joyHorz = A1; // Horizontal
// Motor Speed Values – Start at zero
int MotorSpeed1 = 0;
int MotorSpeed2 = 0;
// Joystick Values – Start at 512 (middle position)
int joyposVert = 512;
int joyposHorz = 512;
void setup()
{
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Start with motors disabled and direction forward
// Motor A
digitalWrite(enA, LOW);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Motor B
digitalWrite(enB, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
void loop() {
// Read the Joystick X and Y positions
joyposVert = analogRead(joyVert);
joyposHorz = analogRead(joyHorz);
if (joyposVert 564)
{
// This is Forward
// Set Motor A forward
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// Set Motor B forward
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
MotorSpeed1 = map(joyposVert, 564, 1023, 0, 255);
MotorSpeed2 = map(joyposVert, 564, 1023, 0, 255);
}
else
{
// This is Stopped
MotorSpeed1 = 0;
MotorSpeed2 = 0;
}
// Now do the steering
// The Horizontal position will “weigh” the motor speed
// Values for each motor
if (joyposHorz < 460)
{
// Move Left
joyposHorz = joyposHorz – 460; // This produces a negative number
joyposHorz = joyposHorz * -1; // Make the number positive
joyposHorz = map(joyposHorz, 0, 460, 0, 255);
MotorSpeed1 = MotorSpeed1 – joyposHorz;
MotorSpeed2 = MotorSpeed2 + joyposHorz;
// Don't exceed range of 0-255 for motor speeds
if (MotorSpeed1 255)MotorSpeed2 = 255;
}
else if (joyposHorz > 564)
{
// Move Right
joyposHorz = map(joyposHorz, 564, 1023, 0, 255);
MotorSpeed1 = MotorSpeed1 + joyposHorz;
MotorSpeed2 = MotorSpeed2 – joyposHorz;
if (MotorSpeed1 > 255)MotorSpeed1 = 255;
if (MotorSpeed2 < 0)MotorSpeed2 = 0;
}
if (MotorSpeed1 < 8)MotorSpeed1 = 0;
if (MotorSpeed2 < 8)MotorSpeed2 = 0;
analogWrite(enA, MotorSpeed1);
analogWrite(enB, MotorSpeed2);
}
Anh có 3 lần kích hoạt khóa học nên anh yên tâm nhé, anh đang sử dụng lần kích hoạt đầu tiên thôi.
Bài tốt nghiệp anh có thể bỏ qua nếu anh đã đạt được mục đích của mình nhé.
OK . Thankyou em !
ad ơi e tải đề bài toàn bị lỗi thế ạ!!!
Hướng dẫn cụ thể đã mô tả trong bài học đầu tiên của khóa học. E tuân thủ đúng thì sẽ không bị lỗi.