Работа над проектом c, и я попал в блокпост. Я пытаюсь напечатать стиль координаты точки, и я включил весь код, необходимый, чтобы помочь вам помочь мне!Проблемы с fgets и printf..printing string
//point.h
struct Point{
char label;
int x;
int y;
};
//point.c
displayPoint(struct Point p){
char label = p.label;
int x = p.x;
int y = p.y;
// label: (x, y)
printf("(%c: (%d, %d)", label, x, y);
}
//build point from standard input
readPoint(){
struct Point point;
printf("Enter label (character): ");
fgets(buff, MAX_LINE, stdin);
point.label = buff; //I think this is the issue here
printf("Enter x:");
fgets(buff, MAX_LINE, stdin);
point.x = (int) strtol(buff, NULL, MAX_LINE);
printf("Enter y:");
fgets(buff, MAX_LINE, stdin);
point.y = (int) strtol(buff, NULL, MAX_LINE);
После компиляции, я получаю следующее сообщение об ошибке:
points.c: In function 'displayPoint':
points.c: warning: initialization makes pointer from integer without a cast [enabled by default]
points.c: warning: format '%c' expects argument of type 'int', but argument 2 has type 'char *' [-Wformat]
points.c: In function 'readPoint':
points.c: warning: assignment makes integer from pointer without a cast [enabled by default]
Если я создаю точку, используя следующую информацию:
Label: A
x: 2
y: 3
и запустить displayPoint я получаю этот выход:
R: (2, 3)
Очевидно, что это неправильно, я не знаю, откуда пришел R. Что мне здесь не хватает? Почему C должен быть таким упрямым, это было бы так просто сделать в Java, Python и т.д.
C имеет дополнительную концепцию указателей, которая дает людям головные боли. Но без этого концепция программирования - это какая-то неполная, хотя она одинаково опасна и потребуется время, чтобы учиться.Как уже указывалось, вы пытаетесь присвоить массив char (buff) одному символу, который невозможен. – fayyazkl
Это: 'readPoint() {/ * ... * /}' - устаревшая форма определения функции, и она даже не будет компилироваться с помощью компилятора C99 или более позднего. Всегда декларировать тип возвращаемого значения и все типы параметров явно; если функция не имеет параметров, используйте '(void)'. Таким образом, это должно быть 'void readPoint (void) {/ * ... * /}'. Аналогично для некоторых других ваших функций. (Это не является причиной вашей проблемы.) –