Вставить строки в массив строк c - PullRequest
0 голосов
/ 30 марта 2019

Мне нужно что-то простое, но я не знаю, почему это так сложно с c (мой фон java), мне нужно вводить строки в массив строк в c, вот мой код:

    int n;  
printf("Please enter number of words \n");
scanf_s("%d", &n);
char *a=(int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++)
{
    printf("Enter word \n");            
    scanf_s("%s", a[i]);// <--line gives error
}

пример:

Please enter number of words
3
Enter word
aaa
Enter word
bbb
Enter word
ccc  

массив будет выглядеть так: [aaa][bbb][ccc]

1 Ответ

1 голос
/ 30 марта 2019

Вы хотите, чтобы:

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

int main()
{
  int n;  

  printf("Please enter number of words \n");
  if (scanf("%d", &n) != 1)
    fprintf(stderr, "invalid number");
  else if (n <= 0)
    fprintf(stderr, "number is not > 0");
  else {
    char ** a = malloc(n * sizeof(char *));
    char word[16];

    for (int i = 0; i < n; i++)
    {
      printf("Enter word (max length 15)\n");            
      if (scanf("%15s", word) != 1) {
        fprintf("EOF");
        return -1;
      }
      a[i] = strdup(word);
    }

    for (int i = 0; i < n; i++)
      printf("[%s]", a[i]);
    putchar('\n');
  }
}

Компиляция и исполнение:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra -Wall as.c
pi@raspberrypi:/tmp $ ./a.out
Please enter number of words 
3
Enter word (max length 15)
aze
Enter word (max length 15)
qsd
Enter word (max length 15)
wxc
[aze][qsd][wxc]

Обратите внимание, что в замечании вы сравниваете C и Java, Java - это объектный язык, а не C, сравнивайте Java и C ++:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
  cout << "Please enter number of words" << endl;

  int n;

  if (!(cin >> n))
    cerr << "invalid number" << endl;
  else if (n <= 0)
    cerr << "number is not > 0" << endl;
  else {
    vector<string> a;
    string word;

    for (int i = 0; i < n; i++)
    {
      cout << "Enter word" << endl;

      if (!(cin >> word)) {
        cerr << "EOF" << endl;
        return -1;
      }
      a.push_back(word);
    }

    for (int i = 0; i < n; i++)
      cout << '[' << a[i] << ']';
    cout << endl;
  }
}

Компиляция и исполнение:

pi@raspberrypi:/tmp $ g++ -pedantic -Wextra -Wall as.cc
pi@raspberrypi:/tmp $ ./a.out
Please enter number of words
3
Enter word
aze
Enter word
qsd
Enter word
wxc
[aze][qsd][wxc]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...