printf показывает неправильный вывод, странный знак вопроса в конце строки [C] - PullRequest
0 голосов
/ 21 декабря 2018

Этот код пытается выполнить очередь, но эта очередь имеет два поля: число и слово.Моя проблема в том, что поле «слово» печатается неправильно (поле «число» в порядке)

Ожидаемый вывод:

22 abc

12 efg

654xyz

К сожалению, вывод выглядит так

https://ibb.co/gjF446F

#include <stdio.h> 
#include <stdlib.h> 
#include <limits.h>
#include <string.h> 

#define MAX_capacity 1000
#define Max_len_napis 100


typedef struct{
   int number;
   char word[];

} data;

data intArray[MAX_capacity];
int peak = 0;
int rear = -1;
int itemCount = 0;

int front() {
   return intArray[peak].number;
}

bool isEmpty() {
   return itemCount == 0;
}

bool isFull() {
   return itemCount == MAX_capacity;
}

int size() {
   return itemCount;
}  

void insert(data x) {

   if(!isFull()) {

      if(rear == MAX_capacity-1) { 
         rear = -1;            
      }       

      int indeks = ++rear;
      intArray[indeks].number = x.number;
      strcpy (intArray[indeks].word, x.word);

      itemCount++;
   }
}


data remove() {
   data dat = intArray[peak++];

   if(peak == MAX_capacity) {
      peak = 0;
   }

   itemCount--;
   return dat;  
}


void print(int N){


    for(int i=0;i<N;i++){
        data n = remove();           
      printf("%d\n",n.number);
      printf("%s\n",n.word); // that's line doesn't work correctly




    }



}


int main() {
   data tab[3];

   tab[0].number = 22;
   strcpy (tab[0].word, "abc");
   insert(tab[0]);

   tab[1].number = 12;
   strcpy (tab[1].word, "efg");
   insert(tab[1]);

   tab[2].number = 654;
   strcpy (tab[2].word, "xyz");
   insert(tab[2]);



   int siz = size();
   print(siz);





    return 0;



   }

Я думаю, что printf ("% s \ n", n.word) не работает правильно,Но если я не использую struct, все работает правильно.

Ответы [ 2 ]

0 голосов
/ 20 июля 2019
#include <stdio.h> 
#include <stdlib.h> 
#include <limits.h>
#include <string.h> 

#define MAX_capacity 1000
#define Max_len_napis 100


typedef struct{
   int number;
   char word[100];

} data;

data intArray[MAX_capacity];
int peak = 0;
int rear = -1;
int itemCount = 0;

int front() {
   return intArray[peak].number;
}

bool isEmpty() {
   return itemCount == 0;
}

bool isFull() {
   return itemCount == MAX_capacity;
}

int size() {
   return itemCount;
}  

void insert(data x) {

   if(!isFull()) {

      if(rear == MAX_capacity-1) { 
         rear = -1;            
      }       

      int indeks = ++rear;
      intArray[indeks].number = x.number;
      strcpy (intArray[indeks].word, x.word);

      itemCount++;
   }
}


data remove() {
   data dat = intArray[peak++];

   if(peak == MAX_capacity) {
      peak = 0;
   }

   itemCount--;
   return dat;  
}


void print(int N){


    for(int i=0;i<N;i++){
        data n = remove();           
      printf("%d\n",n.number);
      printf("%s\n",n.word); // that's line doesn't work correctly




    }



}


int main() {
   data tab[3];

   tab[0].number = 22;
   strcpy (tab[0].word, "abc");
   insert(tab[0]);

   tab[1].number = 12;
   strcpy (tab[1].word, "efg");
   insert(tab[1]);

   tab[2].number = 654;
   strcpy (tab[2].word, "xyz");
   insert(tab[2]);



   int siz = size();
   print(siz);





    return 0;



   }
0 голосов
/ 21 декабря 2018

Вам нужно выделить память для слова.Например, вот так:

typedef struct{
   int number;
   char word[100];

} data;

Лучший способ - динамически выделять память для слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...