#include <stdio.h>
#include <stdlib.h>
struct {
unsigned a:1;
unsigned b:1;
unsigned c:1;
}flags;
int main(){
int o1;
char o3;
char o2;
printf("введите сумму:");
scanf("%d",&o1);
if (o1<1000) flags.a=1;
else flags.a=0;
// printf("%d",flags.a);
printf("Клиент задолжник?/n");
o2= getchar();
if (o2=='y') flags.b=0;
else flags.b=1;
printf("Это постоянный клиент?/n");
o3= getchar();
if (o3=='y') flags.c=1;
else flags.c=0;
printf("%i %i %i",flags.a,flags.b,flags.c);
switch(flags){
case 000: printf("не делать скидки\n"); break;
case 111: printf("скидка- 9 процентов"); break;
case 110: printf("скидка- 8 процентов"); break;
case 101: printf("скидка- 6 процентов"); break;
case 100: printf("скидка- 5 процентов"); break;
case 011: printf("скидка- 4 процента "); break;
case 010: printf("скидка- 3 процента "); break;
case 001: printf("скидка- 1 процент "); break;
}
}
что не так ?(+switch)
не поможете разобраться ...
какой параметр принимает switch() в данном случае ?
Код:
ps: посоветуйте хороший отладчик ,или хорошую документацию по gdb.
Заранее спасибо
Код:
struct {
unsigned int a : 1;
unsigned int b : 1;
unsigned int c : 1;
short toInt() {
return (a << 2) | (b << 1) | c;
}
} flags;
unsigned int a : 1;
unsigned int b : 1;
unsigned int c : 1;
short toInt() {
return (a << 2) | (b << 1) | c;
}
} flags;
И вызывать соответственно
Код:
switch (flags.toInt()) {
case 0: // 000
// ...
case 1: // 001
// ...
case 2: // 010
// ...
case 3: // 011
// ...
case 4: // 100
// ...
case 5: // 101
// ...
case 6: // 110
// ...
case 7: // 111
// ...
}
case 0: // 000
// ...
case 1: // 001
// ...
case 2: // 010
// ...
case 3: // 011
// ...
case 4: // 100
// ...
case 5: // 101
// ...
case 6: // 110
// ...
case 7: // 111
// ...
}
Цитата: rowlot
ps: посоветуйте хороший отладчик ,или хорошую документацию по gdb.
Отладчик для какой ОС?
По gdb лучшее - в сети. Много где...
Cпасибо ,но функции (что в структуре) чего-то не хватает
expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token
непонятно ...
Phodopus
для linux (Debian);
использую gdb ,но мои познания ограничены запуском (run), просто нужды не было его изучать ,до сих пор...
Цитата:
или хорошую документацию по gdb
http://mitya.pp.ru/gdb/gdb_toc.html
еще у Криса Касперски в Искусстве Дизассемблирования неплохо описана работа с GDB.
Цитата: rowlot
Alexander92
Cпасибо ,но функции (что в структуре) чего-то не хватает
expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token
непонятно ...
Cпасибо ,но функции (что в структуре) чего-то не хватает
expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token
непонятно ...
В какой среде вы работаете? Я специально проверил в MSVS 2008 и BCC 5.5, никаких ошибок не увидел. Привожу полный код своего теста на всякий случай, сравните со своим:
Код:
#include <stdio.h>
typedef struct {
unsigned int a : 1;
unsigned int b : 1;
unsigned int c : 1;
short toInt() {
return (a << 2) | (b << 1) | c;
}
} FLAGS, *LPFLAGS;
int main(void) {
FLAGS flags;
flags.a = 1;
flags.b = 0;
flags.c = 1;
printf("%d\n", flags.toInt());
return 0;
}
typedef struct {
unsigned int a : 1;
unsigned int b : 1;
unsigned int c : 1;
short toInt() {
return (a << 2) | (b << 1) | c;
}
} FLAGS, *LPFLAGS;
int main(void) {
FLAGS flags;
flags.a = 1;
flags.b = 0;
flags.c = 1;
printf("%d\n", flags.toInt());
return 0;
}
оба выдали следующее:_____
cc -o ne new.c
new.c:3:1: error: stray ‘`’ in program
new.c:8:17: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘{’ token
new.c: In function ‘main’:
new.c:18:23: error: ‘FLAGS’ has no member named ‘toInt’
____
gcc version 4.6.1
Наверное после обновление что-то не то ...
Попробую откатить версию...
Компилируйте через g++, а не через gcc. В программе использованы возможности C++, а не чистого C.
Вариант №2.
Если хотите оставаться рамках чистого C - вынесите функцию отдельно:
Код:
#include <stdio.h>
typedef struct {
unsigned int a : 1;
unsigned int b : 1;
unsigned int c : 1;
} FLAGS, *LPFLAGS;
short FlagsToShort(LPFLAGS lpFlags);
int main(void) {
FLAGS flags;
flags.a = 1;
flags.b = 0;
flags.c = 1;
printf("%d\n", FlagsToShort(&flags));
return 0;
}
short FlagsToShort(LPFLAGS lpFlags) {
return (lpFlags->a << 2) | (lpFlags->b << 1) | lpFlags->c;
}
typedef struct {
unsigned int a : 1;
unsigned int b : 1;
unsigned int c : 1;
} FLAGS, *LPFLAGS;
short FlagsToShort(LPFLAGS lpFlags);
int main(void) {
FLAGS flags;
flags.a = 1;
flags.b = 0;
flags.c = 1;
printf("%d\n", FlagsToShort(&flags));
return 0;
}
short FlagsToShort(LPFLAGS lpFlags) {
return (lpFlags->a << 2) | (lpFlags->b << 1) | lpFlags->c;
}
разобрался с компиляторами ...(зря откат делал..)
switch(FlagsToShort(&flags)){
case : '101' для выбора как представить это в виде short ;
}
Код:
switch (FlagsToShort(&flags)) {
case 0: // 000
// ...
case 1: // 001
// ...
case 2: // 010
// ...
case 3: // 011
// ...
case 4: // 100
// ...
case 5: // 101
// ...
case 6: // 110
// ...
case 7: // 111
// ...
}
case 0: // 000
// ...
case 1: // 001
// ...
case 2: // 010
// ...
case 3: // 011
// ...
case 4: // 100
// ...
case 5: // 101
// ...
case 6: // 110
// ...
case 7: // 111
// ...
}
ааа .. все спасибо разобрался ...