Помогите, пожалуйста, никак не могу разобраться?

Рейтинг: 0Ответов: 1Опубликовано: 05.06.2023
// talkback.c - Демонстрация и взаимодействие с пользователем
#include <stdio.h>
#include <string.h>   // Предоставляем прототип функции strlen ()
#define DENSITY 62.4  // Плотность человеческого тела (единица: фунты / кубические футы)
int main()
{
float weight, volume;
int size, letters;
char name[40];    // имя - это массив, который может содержать 40 символов
printf("Hi! What's your first name?\n");
scanf("%s", name);
printf("%s, what's your weight in pounds?\n", name);
scanf("%f", &weight);
size = sizeof name;
letters = strlen(name);
volume = weight / DENSITY;
printf("Well, %s, your volume is %2.2f cubic feet.\n",
    name, volume);
printf("Also, your first name has %d letters,\n",
    letters);
printf("and we have %d bytes to store it.\n", size);
return 0;
}

Помогите, пожалуйста, никак не могу разобраться ! В чем проблема: DENSITY не работает, спецификатор %s не работает, scanf не работает.Заранее Огромное Спасибо!

Ответы

▲ 1Принят

В вашем коде присутствуют символы UTF-8. Это широкие пробелы L' ' - Символ: U+3000 Название: IDEOGRAPHIC SPACE. Некоторые символы компилятор может обрабатывать в именах переменных, а их список в стандарте такой :

Annex D (normative)
Universal character names for identifiers
This clause lists the hexadecimal code values that are valid in universal character names in identifiers.

D.1
Ranges of characters allowed
00A8, 00AA, 00AD, 00AF, 00B2–00B5, 00B7–00BA, 00BC–00BE, 00C0–00D6, 00D8–00F6, 00F8–00FF 0100–167F, 1681–180D, 180F–1FFF 200B–200D, 202A–202E, 203F–2040, 2054, 2060–206F 2070–218F, 2460–24FF, 2776–2793, 2C00–2DFF, 2E80–2FFF 3004–3007, 3021–302F, 3031–303F 3040–D7FF F900–FD3D, FD40–FDCF, FDF0–FE44, FE47–FFFD 10000–1FFFD, 20000–2FFFD, 30000–3FFFD, 40000–4FFFD, 50000–5FFFD, 60000–6FFFD, 70000– 7FFFD, 80000–8FFFD, 90000–9FFFD, A0000–AFFFD, B0000–BFFFD, C0000–CFFFD, D0000–DFFFD, E0000–EFFFD

D.2
Ranges of characters disallowed initially
0300–036F, 1DC0–1DFF, 20D0–20FF, FE20–FE2F

Ваши пробелы с кодом U+3000
(UTF-8: 0xE3 0x80 0x80
Восьмеричный код в UTF-8 на языке C: \343\200\200 )

не позволено находиться в Си коде.
Удалите их и будет компилироваться.