Co to jest C będące odpowiednikiem instrukcji C++ cin
? Czy mogę zobaczyć na nim składnię?Co to jest C równoważne z wyrażeniem C++ cin?
Odpowiedz
cin
nie jest instrukcją, jest zmienną, która odnosi się do standardowego strumienia wejściowego. Więc najbliższy mecz w C jest w rzeczywistości stdin
.
Jeśli masz C++ stwierdzenie jak:
std::string strvar;
std::cin >> strvar;
coś podobnego w C byłoby użycie dowolnego z szerokiej gamy funkcji wejściowych:
char strvar[100];
fgets (strvar, 100, stdin);
Zobacz an earlier answer Zadałem dziś pytanie w jeden sposób, aby wprowadzić dane wejściowe i bezpiecznie analizować. Zasadniczo wprowadza linię z fgets
(korzystając z jej zabezpieczenia przed przepełnieniem bufora), a następnie za pomocą sscanf
, aby bezpiecznie skanować linię.
Rzeczy takie jak gets()
i pewnych odmianach z scanf()
(jak nieograniczonych strun) należy unikać jak ognia, ponieważ są one łatwo podatne na nadmierne bufor tras. Są odpowiednie do zabawy, ale im szybciej się ich nauczysz, tym mocniejszy będzie twój kod.
Prawdopodobnie chcesz scanf
.
Przykładem z linku:
int i, n; float x; char name[50];
n = scanf("%d%f%s", &i, &x, name);
Uwaga jednak (jak wspomniano w komentarzach), która jest podatna na scanf buffer overrun, i istnieje wiele innych funkcji wejściowych można użyć (patrz stdio.h
).
Jeśli używasz 'scanf', używaj go przynajmniej w sposób nie przepełniający bufora :-) Zobacz http://stackoverflow.com/questions/3723044/get-scanf-to-quit-when -it-reads-a-newline/3723071 # 3723071 dla lepszego sposobu. – paxdiablo
Nie polecaj używania 'scanf'. http://c-faq.com/stdio/scanfprobs.html – jamesdlin
Myślę, że moje ostrzeżenie jest wystarczająco jasne.OP jest oczywiście całkiem nowy w C, a scanf zapewnia doskonały początek nauki wprowadzania danych z linii poleceń bez konieczności zajmowania się dodatkowymi złożonościami. Jestem pewien, że spotka się z pomysłem przepełnienia bufora zanim zostanie napisany kod produkcyjny. Bardziej doświadczeni użytkownicy czytający pytanie powinni uważać na ostrzeżenie. – sje397
W języku C++, cin jest strumieniem wejściowym stdin. W C nie ma strumienia wejściowego, ale istnieje obiekt pliku o nazwie stdin. można odczytać z niego przy użyciu wielu sposobów, ale tutaj jest przykład z 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;
}
UPDATE
Zmieniłem go używać fgets, co jest znacznie prostsze, ponieważ masz martwić się, jak duży jest twój bufor. Jeśli chcesz przeanalizować dane wejściowe, użyj polecenia scanf, ale upewnij się, że używasz atrybutu width.
-1 dla parzystego * wymieniania * 'dostaje'. Jest zbyt podatny na przepełnienie bufora i nigdy, nigdy, * nigdy * nie powinien być użyty w nowym kodzie. – cHao
Dobra, naprawię to. Czy uważasz, że scanf jest znacznie lepszy? : P –
Ja osobiście nie jestem tym fanem. 'fgets' wykonuje podobne zadanie jak' gets' i pozwala ci określić długość bufora. Jedyny haczyk polega na tym, że iirc trzyma nowy znak, a nie je uderza. – cHao
Nie ma blisko równoważne cin
w C. C++ jest językiem obiektowym i cin
używa wielu jego funkcji (Object-orientacja, szablony, przeciążanie operatorów), które nie są dostępne w C
jednak możesz czytać rzeczy w C używając standardowej biblioteki C, możesz spojrzeć na odpowiednią część tutaj (cstdio reference).
+1 dla zapewnienia odniesienia połączonego zamiast wymieniania/ilustrowania pojedynczej funkcji, tak jakby była to jedyna opcja C. @Anteater:
Masz rację, jestem tak przyzwyczajony do C++, że zapomniałem, że w C nazwy nagłówków są różne. – jbernadas
- 1. co to jest C# równoważne z Iterator w Javie
- 2. Co to jest równoważne C# regex Java appendReplacement i appendTail
- 3. Co to jest bash escape character "\ c"?
- 4. Co to jest C++ analog C# byte []?
- 5. //! [0] C++ - co to jest?
- 6. Co to jest "Przenośny C++"?
- 7. Co to jest "==" w C?
- 8. C# równoważne do C Unii
- 9. Co to jest .NET 4.5 równoważne UserNameWSTrustBinding?
- 10. Co to jest oznaczenie R równoważne LaTeX \ texttt?
- 11. Co to jest odpowiednik C# w dynamicznym C++ w C++?
- 12. C++ Cout & Cin & System "Niejednoznaczny"
- 13. Co to jest równoważne z Pythona strpos ($ elem, "tekst") == false)
- 14. C# równoważne do C++ wektorem lub deque
- 15. Co to jest cin analougus sformatowanego wejścia scanf?
- 16. Co to jest odpowiednik C# w java.util.regex?
- 17. Co to jest LLVM C++ API?
- 18. Co to jest "kategoria" w Objective-C?
- 19. Co to jest ekwiwalent C# Java DecimalFormat?
- 20. Co to jest wskaźnik Singleton w C?
- 21. Co to jest obiekt skalarny w C++?
- 22. Co to jest wymazywanie typów w C++?
- 23. Co to jest obiekt w C?
- 24. java równoważne C# ExpandoObject
- 25. Co to jest szybki parser matematyczny C lub Objective-C?
- 26. Co to jest klasa inline C++?
- 27. Co to jest "upakowana" struktura w C?
- 28. Co to jest ".. ::." w języku C#?
- 29. Co to jest odpowiednik UINT32_MAX w C++?
- 30. Co to jest wersja C++ Java ArrayList
Myślę, że byłoby sprawiedliwe, aby interpretować pytanie jako "ekwiwalent zaświadczenia przy użyciu cin" – sje397