Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2010, 16:30   #1
Rosstarot
 
Аватар для Rosstarot
 
Регистрация: 16.06.2010
Сообщений: 7
По умолчанию Консольное приложение Visual C++

Помогите найти ошибки, plz. Я в C++ недавно, не пойму, что хочет от меня компилятор. Выдает ошибки двух видов, в том месте, где операторы условия
1. error C2446: '==' : no conversion from 'const char *' to 'int'
2. error C2040: '==' : 'int' differs in levels of indirection from 'const char [2]'

Сам код,
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
	SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int n, i,k,l,m;
printf("Введите количество опрашиваемых >\n ");
scanf ( "%d", &n );
int *age=new int [n];
char *gender=new char [n];
int *edu=new int [n];
int *answ=new int [n];

for (i=0; i<n; i++)
{
printf("Введите возраст, пол (M/W), образование (начальное [1], среднее [2], высшее [3]) >\n ");
scanf("%d %s %d", &age[i], &gender[i], &edu[i]);
printf("y/n?");
scanf("%d", &answ[i]);
if (gender[i]=="M" && age[i]>40 && edu[i]==3 && answ[i]=="y") k=k+1;
if (gender[i]=="W" && age[i]<30 && edu[i]==2 && answ[i]=="n") l=l+1;
if (gender[i]=="M" && age[i]<25 && edu[i]==1 && answ[i]=="y") m=m+1;
};
printf (&k, &l, &m);


getch();

}
Rosstarot вне форума Ответить с цитированием
Старый 16.06.2010, 16:53   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
char *gender=new char [n];
дальше
Код:
scanf("%d %s %d", &age[i], &gender[i], &edu[i]);
наверное %ch
Код:
if (gender[i]=="M" && age[i]>40 && edu[i]==3 && answ[i]=="y") k=k+1;
Код:
if (gender[i]=='M' && age[i]>40 && edu[i]==3 && answ[i]=='y' k=k+1;
и дальше то же
Код:
printf (&k, &l, &m);
Код:
printf ("%d %d %d", k, l, m);
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 17.06.2010, 13:13   #3
Rosstarot
 
Аватар для Rosstarot
 
Регистрация: 16.06.2010
Сообщений: 7
По умолчанию

Код немного изменил, теперь вроде все работает, вот только консоль выводит какие-то сумасшедшие значения переменных k, l и m. В debug mode пошагово прогонял цикл, значения этих переменных считаются правильно - но выводится совсем другое. Не пойму почему.
(от scanf пришлось отказаться, т.к. он почему-то пропускал некоторые строки)

Измененный код:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

int n, i,k,l,m;
k=0, l=0, m=10;
printf("Input count >\n ");
cin >> n;
int *age=new int [n];
char *gender=new char [n];
int *edu=new int [n];
char *answ=new char [n];

for (i=0; i<n; i++)
{
printf("Age >\n ");
cin >> age[i];
printf("Gender (m/w) >\n ");
cin >> gender[i];
printf("Education level(beginner[1], middle [2], hight [3]) >\n ");
cin >> edu[i];
printf("y/n?");
cin >> answ[i];
if (gender[i]=='m' && age[i]>40 && edu[i]==3 && answ[i]=='y') k=k+1;
if (gender[i]=='w' && age[i]<30 && edu[i]==2 && answ[i]=='n') l=l+1;
if (gender[i]=='m' && age[i]<25 && edu[i]==1 && answ[i]=='y') m=m+1;
};
printf ("%d %d %d", &k, &l, &m);


getch();
Rosstarot вне форума Ответить с цитированием
Старый 18.06.2010, 09:31   #4
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Лучше объявлять с инициализацией
Код:
int n, i,k=0,l=0,m=0;
и вывод делается так
Код:
printf ("%d %d %d", k, l, m);
а не
Код:
printf ("%d %d %d", &k, &l, &m);
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 22.06.2010, 20:10   #5
Rosstarot
 
Аватар для Rosstarot
 
Регистрация: 16.06.2010
Сообщений: 7
По умолчанию

Никто случайно не знает, как проверить, что age[i] - положительное число и вообще число?
Rosstarot вне форума Ответить с цитированием
Старый 22.06.2010, 20:26   #6
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Код:
template <class T>
 inline bool isPositive (T num)
 {
    return num >= 0 ? 1 : 0;
 }
1. Тоесть если число больше нуля, то оно полжительное
2. Оно всегда будет числом, так как age объявлена с типом int
подпись

Последний раз редактировалось liljon; 22.06.2010 в 20:37.
liljon вне форума Ответить с цитированием
Старый 22.06.2010, 21:10   #7
Rosstarot
 
Аватар для Rosstarot
 
Регистрация: 16.06.2010
Сообщений: 7
По умолчанию

Нет, в смысле, если при вводе в age[i] начнут вводить не цифры, а символы?
Rosstarot вне форума Ответить с цитированием
Старый 22.06.2010, 21:39   #8
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Код:
#define сравнить_строки		strcmp
#define	число				int
#define равно				=
#define возвратим_вот_это	return
#define брехня				false
#define правда				true
#define а_правда_ли			?
#define а_если_нет			:
#define константа			const
#define равно_ли			==
#define начнем				{
#define закончим			}
#define конец				;
#define правдивость			bool
#define символ				char
#define указатель			*

правдивость checkStr(константа символ указатель str)
начнем

	число n равно !сравнить_строки(str,"0") а_правда_ли 0 а_если_нет ( atoi(str) а_правда_ли 0 а_если_нет atoit(str) ) конец
	возвратим_вот_это n равно_ли -1 а_правда_ли брехня а_если_нет правда конец

закончим

//вызываем... если введено не число, то ret содержит false, иначе true
bool ret = checkStr("lol");
UPD: стоп... я сам запутался... гдето потерял atoi

UPD:

Код:
bool checkStr(const char * str)
{
	int n = !strcmp(str,"0") ? 0 : (atoi(str) == 0 ? -1 : atoi(str) );
	return n == -1 ? false : true;
}

//вызываем... если введено не число, то ret содержит false, иначе true
bool ret = checkStr("lol");
а считывать тогда лучше в массив строк. вот тут
Код:
char temp1[256], temp2[256];
scanf("%s %s %s",temp1, &gender[i], temp2);
if ( !checkStr(temp1) && !checkStr(temp2)) 
{
 //введены не числа
}
else
{
 age[i] = atoi(temp1);
 edu[i] = atoi(temp2);
}
иначе если вводить буквы, то age[i] и edu[i] будут содержать нули
подпись

Последний раз редактировалось liljon; 22.06.2010 в 22:13.
liljon вне форума Ответить с цитированием
Старый 22.06.2010, 22:03   #9
Rosstarot
 
Аватар для Rosstarot
 
Регистрация: 16.06.2010
Сообщений: 7
По умолчанию

Если я правильно понял,
Код:
bool chekStr(const char *str)
{
	int n =!strcmp(str,"0") ? 0 : -1;
	return n == -1 ? false : true;
}
но выдает кучу варнингов и не может найти checkStr.
P.S. За #define'ы спасибо, теперь немногим более понятней.
Rosstarot вне форума Ответить с цитированием
Старый 22.06.2010, 22:15   #10
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

гг... я обновил пост. Варнинги незначительные.
Я любил преподовательнице сдавать лабораторные, с вот такими вот непонятными конструкциями, которые она не понимала... Улыбался, смотрев на ее лицо, операторы были задефайнены в отдельном заголовочном файле.
подпись

Последний раз редактировалось liljon; 22.06.2010 в 22:20.
liljon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консольное приложение Lag Общие вопросы C/C++ 3 05.05.2010 08:02
Консольное приложение shock-in Общие вопросы Delphi 2 19.12.2009 22:03
Консольное приложение Arkuz Общие вопросы Delphi 3 25.09.2008 23:59
Консольное приложение a_priori Общие вопросы Delphi 6 12.03.2008 08:33
Консольное приложение eks-s Общие вопросы Delphi 17 25.01.2008 03:12