Программа по вычислениям полностью устраивает, она перемножает 2 матрицы указанного размера с рандомными числами, она запускается и правильно считает, но показывает, что есть ошибки типа: cin, cout, system не являются однозначными, всего 17 ошибок, подчеркивает красным эти операторы, как это убрать?
#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int** P1, ** P2, ** P3, n, m;
cout << "Введите кол-во строк матрицы: ";
cin >> n;
cout << "Введите кол-во столбцов матрицы: ";
cin >> m;
P1 = new int* [n];
for (int i = 0; i < n; i++)
P1[i] = new int[m];
srand(time(0));
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) //рандом 1 матрицы
P1[i][j] = rand() % 10;
for (int i = 0; i < n; i++)
{
cout << endl; //вывод 1 матрицы
for (int j = 0; j < m; j++)
{
cout << setw(3) << P1[i][j] << "t";
}
}
cout << endl;
int k;
cout << "Введите кол-во столбцов 2 матрицы: ";
cin >> k;
P2 = new int* [k];
for (int i = 0; i < m; i++)
P2[i] = new int[k];
for (int i = 0; i < m; i++)
for (int j = 0; j < k; j++) //рандом 2 матрицы
P2[i][j] = rand() % 10;
for (int i = 0; i < m; i++)
{
cout << endl; //вывод 2 матрицы
for (int j = 0; j < k; j++)
{
cout << setw(3) << P2[i][j] << "t";
}
}
cout << endl;
P3 = new int* [n];
for (int i = 0; i < n; i++)
P3[i] = new int[k];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < k; j++) //умножение матриц
{
P3[i][j] = 0;
for (int z = 0; z < m; z++)
P3[i][j] = P3[i][j] + P1[i][z] * P2[z][j];
}
}
cout << endl << "Результат умножения:" << endl;
for (int i = 0; i < n; i++) //вывод результата
умножения
{
cout << endl;
for (int j = 0; j < k; j++)
cout << setw(3) << P3[i][j] << "t";
}
cout << endl;
for (int i = 0; i < n; i++)
delete[] P1[i];
delete[] P1;
for (int i = 0; i < m; i++)
delete[] P2[i];
delete[] P2;
for (int i = 0; i < n; i++)
delete[] P3 [i];
delete[] P3;
system("pause");
return 0;
}
0 / 0 / 0 Регистрация: 07.01.2023 Сообщений: 6 |
|
1 |
|
23.03.2023, 13:30. Показов 1753. Ответов 14
Написала код, всё работает прекрасно, но через какое-то время появляется 90+ ошибок «cout не является однозначным» и код не компилируется (using namespace std есть, да и код работал), раньше эту проблему удавалось решить переписав строку «using namespace std» или просто убрав «;» и вернув её обратно, но сейчас это уже не помогает. Поискала решение, некоторые перезапускают VS, это помогло, но ошибка появляется очень часто и постоянно перезапускать программу неудобно. Подскажите, может есть ещё какие-то способы это решить.
0 |
Лежебока 299 / 218 / 92 Регистрация: 12.05.2021 Сообщений: 1,264 |
|
23.03.2023, 13:31 |
2 |
moolingtoon, предоставьте пример и проблемы, а там будет видно,наверно
0 |
Нарушитель 8606 / 4610 / 1064 Регистрация: 12.03.2015 Сообщений: 21,685 |
|
23.03.2023, 13:33 |
3 |
Подскажите, может есть ещё какие-то способы это решить. Что за программного монстра ты рожаешь? Для этого использование MSVC необходимо?
0 |
moolingtoon 0 / 0 / 0 Регистрация: 07.01.2023 Сообщений: 6 |
||||
23.03.2023, 13:56 [ТС] |
4 |
|||
вот небольшой кусочек, ошибка выделяет все строчки там где есть cout
0 |
Нарушитель 8606 / 4610 / 1064 Регистрация: 12.03.2015 Сообщений: 21,685 |
|
23.03.2023, 14:04 |
5 |
вот небольшой кусочек, ошибка выделяет все строчки там где есть cout Проблема явно в самой IDE и/или в мокрософтовском компиляторе.
0 |
0 / 0 / 0 Регистрация: 07.01.2023 Сообщений: 6 |
|
23.03.2023, 14:06 [ТС] |
6 |
у меня тоже работает, до определенного момента, через какое-то время появляется ошибка, раньше чинить её получалось а вот сейчас никак
0 |
Нарушитель 8606 / 4610 / 1064 Регистрация: 12.03.2015 Сообщений: 21,685 |
|
23.03.2023, 14:08 |
7 |
у меня тоже работает, до определенного момента, через какое-то время появляется ошибка, раньше чинить её получалось а вот сейчас никак Я просил:
Для этого использование MSVC необходимо?
0 |
0 / 0 / 0 Регистрация: 07.01.2023 Сообщений: 6 |
|
23.03.2023, 14:12 [ТС] |
8 |
курсовая по с++, начала работу естественно в VS, не думаю что переходить на новую среду будет удобно
0 |
Нарушитель 8606 / 4610 / 1064 Регистрация: 12.03.2015 Сообщений: 21,685 |
|
23.03.2023, 14:14 |
9 |
курсовая по с++, начала работу естественно в VS Почему естественно?
не думаю что переходить на новую среду будет удобно Почему?
0 |
Нарушитель 8606 / 4610 / 1064 Регистрация: 12.03.2015 Сообщений: 21,685 |
|
23.03.2023, 14:19 |
10 |
MSVC — это не для курсовых и лаб, а для чего-то грандиозного, с окошками, например. Для мелких консольных проектов можно юзать и что-то попроще.
0 |
0 / 0 / 0 Регистрация: 07.01.2023 Сообщений: 6 |
|
23.03.2023, 14:26 [ТС] |
11 |
изначально изучение языка начали в VS и постоянно работали в нём
0 |
Нарушитель 8606 / 4610 / 1064 Регистрация: 12.03.2015 Сообщений: 21,685 |
|
23.03.2023, 14:32 |
12 |
изначально изучение языка начали в VS и постоянно работали в нём А, ну это другое дело!
научиться кодить, а тут вон оно чо, Михалыч!
0 |
фрилансер 4815 / 4416 / 941 Регистрация: 11.10.2019 Сообщений: 11,652 |
|
23.03.2023, 14:40 |
13 |
using namespace std есть вот и плохо. Убирай его и везде к его идентификаторам приписывай Добавлено через 1 минуту Добавлено через 1 минуту
но через какое-то время появляется 90+ ошибок точно
0 |
Лежебока 299 / 218 / 92 Регистрация: 12.05.2021 Сообщений: 1,264 |
|
23.03.2023, 15:00 |
14 |
курсовая по с++, начала работу естественно в VS, не думаю что переходить на новую среду будет удобно Если там нет ничего супер-пупер навороченного, то попробуй другую среду(dev-c++, codeblocks),на крайняк можно онлайн компилятор
0 |
Вездепух 10968 / 5953 / 1628 Регистрация: 18.10.2014 Сообщений: 14,943 |
|
23.03.2023, 17:32 |
15 |
у меня тоже работает, до определенного момента, через какое-то время появляется ошибка, раньше чинить её получалось а вот сейчас никак Так не бывает и вы что-то выдумываете. Разумеется, если ошибка есть, то никакие «переходы на другую IDE» тут не помогут.
ошибка выделяет все строчки там где есть cout «Выделяет»? Что значит «выделяет»?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
23.03.2023, 17:32 |
Помогаю со студенческими работами здесь Ошибка компиляции: «ref» не является однозначным «count» не является однозначным, проблема в коде Ошибка компиляции «Е0266, х не является однозначным» Есть класс Tank, являющийся наследником Rectangle, который, в свою очередь,… Странная ошибка volatile int count — count не является однозначным. Ещё про CloseHandle — для чего это? Найти причины ошибки: cout не является членом std Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 15 |
Язык программирования C++ удобен и эффективен в использовании, имеет обширную библиотеку функций и операторов. Однако, для новичков может быть неоднозначной использование оператора cin. Это связано с тем, что cin может считать несколько значений из потока ввода. Именно эта особенность является важной для программистов, которые работают с консольным вводом данных в своих приложениях.
Для понимания этой особенности необходимо понять, что поток ввода в C++ может содержать несколько значений, которые разделяются различными символами (пробелом, табуляцией или переводом строки). Оператор cin может быть использован для считывания нескольких значений из этого потока ввода.
Однако, важно знать, что поведение оператора cin может быть непредсказуемым, если вы не предоставите достаточно информации о том, какие значения и в каком порядке вы хотите считать. Поэтому программисты должны быть осторожными при использовании этого оператора и использовать функции управления вводом данных в консоли для предотвращения ошибок.
Таким образом, почему cin не является однозначным — это важная особенность C++, которая требует внимательного и аккуратного использования. Каждый программист должен знать эту особенность и быть в состоянии управлять вводом данных в своих приложениях для достижения наилучших результатов.
Содержание
- Неоднозначность cin в C++
- Причины неоднозначности
- Как избежать неоднозначности при работе с cin
- Вопрос-ответ
- Зачем в C++ использовать cin?
- Что значит, что cin не является однозначным?
Неоднозначность cin в C++
Cin — это стандартный поток ввода, который используется в языке программирования C++. Однако, этот поток имеет важную особенность — он не является однозначным.
Что это значит? Рассмотрим пример:
int a;
double b;
cin >> a >> b;
Пользователь вводит значения для a и b, но вот вопрос: как программа должна обрабатывать этот ввод? Какой символ должен считаться разделителем между a и b?
Существуют различные варианты обработки ввода, в зависимости от варианта разделителя. Например, если разделитель — это пробел, то a будет считано как целочисленное значение, а b — как значение типа double. Если разделитель — это запятая, то возникнет ошибка при считывании b, так как типы значения и ожидаемые разделители будут несоответствующими.
Чтобы избежать этой неоднозначности, можно использовать функции getline и sstream. Функция getline позволяет получать строку целиком, а стрим sstream позволяет проводить операции с типами данных. Эти функции могут помочь обработать ввод данных более конкретно.
- Функция getline:
- getline(cin, string) — считывает полную строку из потока ввода и сохраняет ее в переменную типа string.
- Стрим sstream:
- stringstream ss (string) — создает объект типа stringstream и инициализирует его значением типа string.
- ss >> variable — приводит значение stringstream к типу данных переменной и сохраняет его в переменную.
Таким образом, использование функций getline и sstream позволяет избежать неоднозначности cin и обрабатывать ввод данных на более точном уровне.
Причины неоднозначности
В С++ существует несколько причин, почему cin может быть неоднозначным. Рассмотрим их подробнее:
- Ввод данных с помощью cin осуществляется до тех пор, пока не будет введен конец строки (нажатия клавиши Enter). Это означает, что при вводе нескольких значений через пробел, cin считает их за один ввод и будет использовать первое значение в строке.
- Не всегда ясно, какой тип данных нужно считывать с помощью cin. Например, если пользователь вводит число без десятичной точки, то он может ожидать, что это будет целое число, но cin может интерпретировать его как число с плавающей точкой.
- В С++ есть возможность перегрузки операторов, что может привести к тому, что cin будет интерпретировать ввод неожиданным образом.
Все эти причины могут привести к тому, что cin не является однозначным и может вызвать проблемы в программе. Поэтому при использовании cin необходимо быть осторожным и проверять вводимые значения на соответствие требованиям программы.
Как избежать неоднозначности при работе с cin
Одним из способов избежать проблем с вводом данных в C++ является использование строго определенного формата ввода для cin. Это можно сделать с помощью функции setiosflags и указанием желаемого формата. Например:
cin.setiosflags(ios_base::fixed);
cin.precision(2);
Этот код задает формат ввода с фиксированной точностью до двух знаков после запятой. Теперь ввод данных будет производиться строго в заданном формате и не будет допускаться неоднозначность.
Также можно использовать функцию getline для ввода строк и разделения данных по определенному символу. Например:
string str;
getline(cin, str, ',');
Этот код считывает строку до первой запятой и сохраняет ее в переменную str. Таким образом, даже если в строке будет много данных, все они будут правильно разделены и не будет неоднозначности.
Наконец, следует проверять введенные данные на соответствие желаемому формату. Например, если мы ожидаем ввод целого числа, то можно использовать следующий код:
int num;
while (!(cin >> num)) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), 'n');
cout << "Invalid input. Please try again." << endl;
}
Этот код проверяет, что введенные данные являются целым числом, и в случае необходимости просит пользователя ввести данные повторно.
Вопрос-ответ
Зачем в C++ использовать cin?
cin в C++ используется для ввода данных с клавиатуры. Он позволяет пользователю вводить значения переменных во время работы программы и потом использовать эти значения для дальнейшей обработки.
Что значит, что cin не является однозначным?
В C++ cin не является однозначным, потому что он может прочитать только те данные, которые введены в поток до разделительного символа. Ввод может завершиться как по границе слова, так и по границе строки. Поэтому при вводе данных с клавиатуры необходимо учитывать эту особенность и использовать соответствующие функции для обработки разных типов данных.
This kind of thing doesn’t just magically happen on its own; you changed something! In industry we use version control to make regular savepoints, so when something goes wrong we can trace back the specific changes we made that resulted in that problem.
Since you haven’t done that here, we can only really guess. In Visual Studio, Intellisense (the technology that gives you auto-complete dropdowns and those squiggly red lines) works separately from the actual C++ compiler under the bonnet, and sometimes gets things a bit wrong.
In this case I’d ask why you’re including both cstdlib
and stdlib.h
; you should only use one of them, and I recommend the former. They are basically the same header, a C header, but cstdlib
puts them in the namespace std
in order to «C++-ise» them. In theory, including both wouldn’t conflict but, well, this is Microsoft we’re talking about. Their C++ toolchain sometimes leaves something to be desired. Any time the Intellisense disagrees with the compiler has to be considered a bug, whichever way you look at it!
Anyway, your use of using namespace std
(which I would recommend against, in future) means that std::system
from cstdlib
now conflicts with system
from stdlib.h
. I can’t explain what’s going on with std::cout
and std::cin
.
Try removing #include <stdlib.h>
and see what happens.
If your program is building successfully then you don’t need to worry too much about this, but I can imagine the false positives being annoying when you’re working in your IDE.
Позвольте мне предвосхитить это, сказав, что я включил (также относится к string, endl, и буквально все не работает); моя IDE не показывает ошибок, насколько синтаксис идет; и я не могу понять, почему эта проблема происходит? Он отлично работает в одном из моих других примеров кода C ++, которые я написал.
Поэтому я пытаюсь сделать небольшую игру, быков и коров. Мой основной код выглядит следующим образом:
Наконец, мой файл BullsAndCows.cpp:
Ошибки, которые я получаю, так как «cout не является членом std», символ cout не может использоваться в объявлении использования. До этого я использовал «использование пространства имен std», и это возвращало бы ошибки, такие как «BullsAndCows» не является пространством имен или классом (если это не класс, то я должен быть марсианином). Также кое-что о пропавшем «;» перед userInput, например, в моем коде main.cpp; что не имеет смысла, так как нет ничего, что не хватает этого. Я использую VS2017. Почему C ++ такой раздражающий язык для работы?
Решение
прежде чем любые другие включают директивы.
Автор Јляп Шляпович задал вопрос в разделе Другие языки и технологии
Помогите пожалуйста исправить ошибку в коде программы (C++). Был бы благодарен. и получил лучший ответ
Ответ от Valrand()[гуру]
Причина: здесь, возможно, компилятором делается попытка интерпретировать «cout
Двоичное дерево поиска
Задание. Построение и обработка двоичных деревьев поиска. Реализовать программу, выполняющую следующий набор операций с деревьями поиска:
поиск вершины с заданным значением ключа с выводом счетчика числа появлений данного ключа
добавление новой вершины в соответствии со значением ее ключа или увеличение счетчика числа появлений
построчный вывод дерева в наглядном виде с помощью обратно-симметричного обхода
вывод всех вершин в одну строку по порядку следования ключей с указанием для каждой вершины значения ее счетчика появлений
удаление вершины с заданным значением ключа
Выдает (в VS 2012) следующие ошибки:
Т. Е. он утв-ет что count не является однозначным и не определен