C tương đương với câu lệnh C++ cin
là gì? Ngoài ra tôi có thể thấy cú pháp trên nó?C tương đương với câu lệnh cin C++ là gì?
Trả lời
cin
không phải là một tuyên bố, đó là biến đề cập đến luồng đầu vào chuẩn. Vì vậy, trận đấu gần nhất trong C thực sự là stdin
.
Nếu bạn có một C++ tuyên bố như:
std::string strvar;
std::cin >> strvar;
một điều tương tự trong C sẽ là sử dụng bất kỳ một loạt các chức năng đầu vào:
char strvar[100];
fgets (strvar, 100, stdin);
Xem an earlier answer Tôi đã đưa ra một câu hỏi ngày hôm nay trên một cách để làm đầu vào dòng và phân tích cú pháp một cách an toàn. Về cơ bản, nó nhập một dòng với fgets
(tận dụng khả năng bảo vệ tràn bộ đệm của nó) và sau đó sử dụng sscanf
để quét đường an toàn.
Những điều như gets()
và biến thể nhất định của scanf()
(như chuỗi vô biên) nên tránh như tránh tà vì chúng dễ dàng nhạy cảm để đệm quá chạy. Chúng rất tốt để chơi với nó nhưng bạn càng sớm tìm hiểu cách tránh chúng, mã của bạn càng mạnh mẽ hơn.
Bạn có thể muốn scanf
.
Một ví dụ từ liên kết: Tuy nhiên
int i, n; float x; char name[50];
n = scanf("%d%f%s", &i, &x, name);
Note (như đã đề cập trong ý kiến) scanf đó là dễ bị buffer overrun, và có rất nhiều các chức năng nhập khác mà bạn có thể sử dụng (xem stdio.h
).
Nếu bạn _must_ sử dụng 'scanf', ít nhất hãy sử dụng nó theo cách không tràn bộ đệm :-) Xem http://stackoverflow.com/questions/3723044/get-scanf-to-quit-when -it-đọc-a-newline/3723071 # 3723071 cho một cách tốt hơn. – paxdiablo
Vui lòng không khuyên bạn sử dụng 'scanf'. http://c-faq.com/stdio/scanfprobs.html – jamesdlin
Tôi nghĩ rằng cảnh báo của tôi đủ rõ ràng.OP rõ ràng là khá mới đối với C, và scanf cung cấp sự khởi đầu hoàn hảo để tìm hiểu về đầu vào dòng lệnh mà không cần phải quan tâm đến các phức tạp bổ sung. Tôi chắc chắn rằng anh/cô ấy sẽ gặp phải ý tưởng của bộ đệm tràn ngập một lần nữa trước khi bất kỳ mã sản xuất được viết. Nhiều người dùng có kinh nghiệm đọc câu hỏi nên chú ý đến cảnh báo. – sje397
Trong C++, cin là luồng đầu vào chuẩn. Không có luồng đầu vào nào trong C, nhưng có một đối tượng tệp, được gọi là stdin. Bạn có thể đọc từ nó sử dụng rất nhiều cách khác nhau, nhưng đây là một ví dụ từ cplusplus.com:
/* fgets example */
#include <stdio.h>
int main()
{
char buffer[256];
printf ("Insert your full address: ");
if (fgets(buffer, 256, stdin) != NULL) {
printf ("Your address is: %s\n", buffer);
}
else {
printf ("Error reading from stdin!\n");
}
return 0;
}
CẬP NHẬT
Tôi đã thay đổi nó để sử dụng fgets, đó là đơn giản hơn nhiều kể từ khi bạn có lo lắng về dung lượng bộ đệm của bạn. Nếu bạn cũng muốn phân tích cú pháp scanf sử dụng đầu vào, nhưng hãy đảm bảo rằng bạn sử dụng thuộc tính chiều rộng.
-1 cho ngay cả * đề cập * 'được'. Nó quá dễ bị tràn bộ đệm, và không bao giờ nên, bao giờ, * bao giờ * được sử dụng trong mã mới. – cHao
Được rồi, tôi sẽ sửa chữa. Bạn có nghĩ scanf tốt hơn không? : P –
Cá nhân tôi không phải là người hâm mộ của nó. 'fgets' thực hiện một công việc tương tự với' gets', và cho phép bạn chỉ định chiều dài bộ đệm. Việc bắt duy nhất là iirc nó giữ dòng mới chứ không phải là chomping nó. – cHao
Không có tương đương gần cin
trong C. C++ là một ngôn ngữ hướng đối tượng và cin
sử dụng nhiều tính năng của nó (đối tượng định hướng, các mẫu, điều hành quá tải) mà không có sẵn trên C.
Tuy nhiên, bạn có thể đọc mọi thứ trong C bằng cách sử dụng thư viện chuẩn C, bạn có thể xem phần liên quan tại đây (cstdio reference).
+1 để cung cấp tham chiếu được liên kết thay vì đề cập/minh họa một hàm đơn như thể đó là tùy chọn C duy nhất. @Anteater:
Bạn nói đúng, tôi rất quen với C++ đã quên rằng trong C tên tiêu đề khác nhau. – jbernadas
- 1. Tương đương Java của cin (C++)
- 2. C# tương đương với câu lệnh Với trong VB là gì?
- 3. Tương đương với câu lệnh "Dim" của VB trong C# là gì?
- 4. Câu lệnh VB "Chr (0)" tương đương với C# là gì?
- 5. Tương đương với mới/xóa C++ trong C là gì?
- 6. C# tương đương với dynamic_cast của C++ là gì?
- 7. Tương đương C# của MsgWaitForMultipleObjects là gì?
- 8. JVM tương đương trong C# là gì?
- 9. Tương đương với C# của java.util.regex là gì?
- 10. Cú pháp VB.NET tương đương với các kiểu vô danh trong câu lệnh LINQ là gì?
- 11. Tương đương với lớp Java BigDecimal trong C# là gì?
- 12. Tương đương với Math.abs() trong Mục tiêu-C là gì?
- 13. Tương đương với C++ của UINT32_MAX là gì?
- 14. VB.NET tương đương với mã C# này là gì?
- 15. Tương đương với LinkedHashSet (Java) trong C# là gì?
- 16. Tương đương với bigint trong C# là gì?
- 17. Tương đương với C++ cho AutoResetEvent trong Linux là gì?
- 18. Tương đương với JavaScript của C# Server.URLEncode là gì?
- 19. Tương đương với Thread.SetApartmentState trong C++ là gì?
- 20. Sql server datatype thực, tương đương với C# là gì?
- 21. C# tương đương với isInstance của Java() là gì?
- 22. Tương đương với NSDictionary trong C# là gì?
- 23. C# tương đương với "self ::" của PHP là gì?
- 24. Là getchar() tương đương với scanf ("% c") và putchar() tương đương với printf ("% c")?
- 25. C# tương đương với shell_exec
- 26. Tương đương với ctrl c trong lệnh hủy chương trình
- 27. Tương đương VB.NET của từ khóa C# "là" là gì?
- 28. Tương đương OSX, C cho uint32 và uint64 là gì?
- 29. DoEvents tương đương với C++?
- 30. Tương đương Java cho mã C# sau là gì?
Tôi nghĩ sẽ công bằng khi diễn giải câu hỏi có nghĩa là 'tương đương với một tuyên bố sử dụng cin' – sje397