2015-12-28 1 views
-3

1.actually Я хочу сначала указать число N (количество строк, которые я хочу ввести) в качестве ввода, а затем в следующей строке строку с использованием gets(). Но когда я нажимаю enter, нет. строк я мог войти в N-1.я попытался с помощью Е («\ п»), но это не work.Please кто-то может помочь мне в this.eg:программирование в C с использованием строк

//code 
    int N,i,arr[N]; 
    char str[50]; 
    scanf("%d",&N) //no. of strings required 
    for(i=0;i<N;i++) 
    { 
     gets(str); 
     arr[i]=strlen(a); 
    } 
    for(i=0;i<N;i++) 
    { 
     printf("%d\n",arr[i]); 
    } 

я хочу, чтобы ввести свой вклад чтобы быть похожим на это:

2 //no. of strings 
    ABCFD //string 1 
    ASWD //string 2 
    //But actually what i am getting using printf("\n") 

и выход:

5 
    4 

, но что я получаю:

2 
    //blank space 
    ASWD //string 2 

и выход

0 
    4 
+3

Разместите код, чтобы мы могли смотреть на него. – nicomp

+2

Пожалуйста, покажите свое исследование до времени. Сначала прочитайте страницу [Ask]. –

+0

Добро пожаловать в StackOverflow. Не разочаровывайтесь, когда ваш вопрос опущен. Имейте в виду, что другие, кто хочет ответить, требуют достаточной информации. Подробнее читайте http://stackoverflow.com/help/how-to-ask. В этом случае укажите минимальный код. – harper

ответ

1

После ввода значения для N остается a newline во входном буфере, который принимается следующим gets как пустой ввод. В любом случае gets является устаревшей функцией: используйте fgets, например, вот так. Я напечатал каждую запись, чтобы показать, что в конце каждого из них есть newline, и удалил эту новую строку.

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

int main(void) { 
    int N, i; 
    char str[50]; 
    printf("Enter number of cases\n"); 
    scanf("%d%*c", &N);         // read newline too, but discard 
    for(i=0; i<N; i++) 
    { 
     printf("\nEnter string\n"); 
     if (fgets(str, sizeof str, stdin) == NULL) 
      return 1; 
     printf("Shows newline >>%s<<\n", str);   // show that newline is retained 
     str [ strcspn(str, "\r\n") ] = 0;    // remove trailing newline 
     printf("After removal >>%s<<\n", str);   // show that newline was removed 
    } 
    return 0; 
} 

выход программы

Enter number of cases 
2 

Enter string 
one 
Shows newline >>one 
<< 
After removal >>one<< 

Enter string 
two 
Shows newline >>two 
<< 
After removal >>two<< 
+0

большое спасибо :) – user007

-1

Похоже, вы не получаете количество строк ожидается, это правильно?

Если это так, посмотрите на код цикла.

Наиболее вероятно новичок ошибка с индексированием. Массивы в C индексируются 0.

Это означает, что если у вас есть int test [3], индексы теста будут равны 0, 1 и 2. Это означает, что наивысший индекс будет N-1.

Итак, убедитесь, что первая строка, которую вы принимаете в настоящее время помещен в индекс 0, а не индекс 1.

0

Попробуйте -

int lineNumbers; 
scanf("%d", &lineNumbers); 
char **linesOfString = (char**) malloc(lineNumbers * sizeof(char *)); 
int i; 
for(i = 0; i < lineNumbers; i++) { 
    fflush(stdin); 
    linesOfString[i] = (char *) malloc(255 * sizeof(char)); 
    scanf("%s", linesOfString[i]); 
} 
for(i = 0; i < lineNumbers; i++) { 
    printf("%s", linesOfString[i]); 
} 
free(linesOfString); 

return 0; 
Смежные вопросы