LINUX.ORG.RU

C: char в качестве целочисленного типа


0

1

есть необходимость использовать unsigned char как целочисленный тип. однако при чтении с модификатором %i числа записываются неправильно. как нужно читать числа в char?



Последнее исправление: preepunk (всего исправлений: 1)

C: char в качестве вещественного типа
есть необходимость использовать unsigned char как целочисленный тип

Ну ты определись. Кстати, ни разу не видел char вещественным.

f1xmAn ★★★★★
()
Ответ на: комментарий от f1xmAn

как целочисленный, а под вещественным я имел ввиду числовой а не символьный) нужно прочитать через scanf число и запихать в char не ломая стека. не могу определиться с модификатором

preepunk
() автор топика
Ответ на: комментарий от invy

Это называется незачет. Но у парня еще есть время. ☺

f1xmAn ★★★★★
()

Это и так численный тип, а то, что тыможешь значки выводить в его диапазоне - это просто удобная фича. %d

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

я в курсе. теперь мне надо записать в чар число 48. и я хочу ввести в консоли 48 а не 1. подставляя %i %hhu и другие веселые модификаторы программа ломает стек.

preepunk
() автор топика
Ответ на: комментарий от preepunk

В сях есть или int или float, остальные базовые типы отличаются только разрядностью.

anonymous
()
Ответ на: комментарий от f1xmAn
#include <stdio.h>

int main(int fuck, char* you[]){
    
    unsigned char a, b;
    //First attempt
    printf("Enter any two numbers between 0 and 255\n");
    scanf("%u", &a);
    scanf("%u", &b);
    
    printf("Now we have\n%u\n", a); 
    printf("%u\n----------\n", b); 
    
    //Second attempt
    printf("Enter any two numbers between 0 and 255\n");
    scanf("%d", &a);
    scanf("%d", &b);
    printf("Now we have\n%d\n", a); 
    printf("%d\n----------\n", b); 
    
    //Third attempt
    printf("Enter any two numbers between 0 and 255\n");
    scanf("%hhu", &a);
    scanf("%hhu", &b);
    printf("Now we have\n%hhu\n", a); 
    printf("%hhu\n----------\n", b); 
    
    printf("FUCK\n");
    
    
     scanf("%u", &b);
    
}

Не шарите товарищи

preepunk
() автор топика
Ответ на: комментарий от preepunk
cat 1.c
#include <stdio.h> 
main(){
	int X = -10;        
	char C = (char) X;
	unsigned U = 200;
	unsigned char UC = (unsigned char) U;
	printf("X=%d, C=%hhd, U=%u, UC=%hhu\n",X,C,U,UC);
}

gcc 1.c && ./a.out
X=-10, C=-10, U=200, UC=200
Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от melkor217

поправил, чтобы не вызывать ни у кого диссонанса в голове

preepunk
() автор топика
Ответ на: комментарий от preepunk

На кой хрен тебе в char считывать? Считывай в int!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от preepunk

На:

#include <stdio.h> 
main(){
	unsigned char U = -1;
	while(U){
		printf("Вводи число: ");
		scanf("%hhu", &U);
		printf("Ты ввел: %hhu\n", U);
	}
}

gcc 1.c && ./a.out 
Вводи число: 1
Ты ввел: 1
Вводи число: 100
Ты ввел: 100
Вводи число: 200
Ты ввел: 200
Вводи число: 300
Ты ввел: 44
Вводи число: -1
Ты ввел: 255
Вводи число: 0
Ты ввел: 0

Но лучше всего считывать сначала в строку, потом проверять ее (чтобы точно было число в диапазоне 0..255), а потом уже загонять данные в char

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от preepunk
dan@dan-desktop:~$ cat main.c
#include <stdio.h>

int main() {
        char a,b;
        scanf("%hhd",&a);
        printf("%hhd\n",a);
        return 0;
}
dan@dan-desktop:~$ gcc main.c
dan@dan-desktop:~$ ./a.out 
120
120
dan@dan-desktop:~$ ./a.out 
128
-128
dan@dan-desktop:~$ ./a.out 
127
127
dan@dan-desktop:~$ ./a.out 
256
0
dan@dan-desktop:~$ ./a.out 
255
-1
melkor217 ★★★★★
()
Ответ на: комментарий от Eddy_Em

Но лучше всего считывать сначала в строку, потом проверять ее (чтобы точно было число в диапазоне 0..255), а потом уже загонять данные в char

Сразу gmp прикрутить, чо

melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

будь добр запусти вот этот код и посмотри что будет с а

int main() {
        char a,b;
        scanf("%hhd",&a);
        scanf("%hhd",&b);
        printf("%hhd\n",a);
        
        printf("%hhd\n",b);
        return 0;
}

preepunk
() автор топика

для тех кто в танке: есть код

int main() {
        char a,b;
        scanf("%hhd",&a);
        scanf("%hhd",&b);
        printf("%hhd\n",a);
        printf("%hhd\n",b);
        return 0;
}
Запускаю
10
10
Получаю
0
10
все потому что эти модификаторы соседнюю память портят.

preepunk
() автор топика
Ответ на: комментарий от preepunk

Бред, ничего подобного:

#include <stdio.h> 
main(){
	unsigned char U = -1, U1;
	while(U){
		printf("Вводи два числа: ");
		scanf("%hhu", &U);
		scanf("%hhu", &U1);
		printf("Ты ввел: %hhu и %hhu\n", U, U1);
	}
}

gcc 1.c && ./a.out 
Вводи два числа: 12 34
Ты ввел: 12 и 34
Вводи два числа: -1 -4
Ты ввел: 255 и 252
Вводи два числа: 234
21
Ты ввел: 234 и 21
Вводи два числа: 0 0
Ты ввел: 0 и 0

У тебя, часом, не MIPS какой-нибудь? Что за платформа, что за ядро?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от preepunk

Абсолютно твой код:

cat 2.c
#include <stdio.h>
int main() {
        char a,b;
        scanf("%hhd",&a);
        scanf("%hhd",&b);
        printf("%hhd\n",a);
        printf("%hhd\n",b);
        return 0;
}

gcc 2.c && ./a.out 
10 10
10
10

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от preepunk

x64 mingw

Осиль уже прочитать спецификацию scanf в MSDN, и не пудри людям мозги.

Deleted
()
Ответ на: комментарий от Eddy_Em

%hhd

Может не надо использовать hh, под плюсами варнинги кидать будет, что нет в стандарте. Может лучше считать обычный int, а потом привести его к unsigned char?

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

под плюсами варнинги кидать будет

В ТЗ никаких плюсов не было. И в плюсах используется cin, а не scanf.

Может лучше считать обычный int, а потом привести его к unsigned char?

Лучше, я об этом выше говорил.

Eddy_Em ☆☆☆☆☆
()

troll mode on

int i;
char c;
scanf("%i\n", &i);
c = i;
printf("%d\n", c);
troll mode off

nanoolinux ★★★★
()
Ответ на: комментарий от Eddy_Em

И в плюсах используется cin, а не scanf.

Это не строгое утверждение.

pathfinder ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.