Распечатайте имя определенным образом - PullRequest
0 голосов
/ 31 марта 2019

Я должен составить код, который печатает имя и фамилию следующим образом: Смит А.

До сих пор я пробовал различные техники и случайно создал бесконечный цикл "для", я верю, хотя я не уверен на 100%, как я это сделал. Это специально для C, я относительно новичок в языке, и, несмотря на то, что я прочитал учебник, я не очень хорошо понимаю, как работают символы внутри массивов. Это, вероятно, легкая проблема, которую я слишком много думаю. Это то, что я написал до сих пор, исключая ненужные аспекты кода (т. Е. Определение)

ОБНОВЛЕННЫЙ КОД

int main(void)
{
  char name, letter;
  char fname[MAX], lname[MAX];
  int countf, countl, i, j;

  printf("Enter a first and last name: ");
  countf = 0;
  countl = 0;
  while ((name = getchar()) != ' ') {
      fname[countf++] = name; 
  }

  while ((name = getchar()) != '\n') {
      lname[countl++] = name;
  }

 for(i=0;i < sizeof(lname);i++) {
     putchar(lname[i]);
 }
 printf(", ");
 putchar(fname[0]);
 printf(".");

  return 0;
}

У меня все еще есть случайные и ненужные переменные. Текущий вывод - Смит (символ) t (символ) ~ (два символа), A. «Я не уверен, как избавиться от глюков

1 Ответ

0 голосов
/ 31 марта 2019

Вы должны прекратить выводить фамилию в конце допустимых данных, а не в конце массива:

for( i = 0; i < countl; i++ )
//              ^^^^^^

Это исправляет ваш код, но вы несколько усложняете проблему.Вы излишне сохраняете ввод, когда вам нужно только сохранить первую букву.Затем вы можете просто отбросить оставшуюся часть имени и вывести фамилию непосредственно перед окончательным выводом сохраненной первой буквы - таким образом:

int main( void )
{
    printf( "Enter a first and last name: " );

    // Keep first letter to output last.
    char letter = getchar() ;

    // Discard the rest of the first name
    while( getchar() != ' ' )
    {
       // Do nothing until SPACE
    }

    // Output the last name
    int namech = 0 ;
    while( (namech = getchar()) != '\n' )
    {
        putchar( namech ) ;
    }
    printf( ", " );

    // Output the first letter
    putchar( letter ) ;
    printf( "." );

    return 0;
}

Это имеет явное преимущество в том, что вы защищены от любых проблем переполнения буфера- потому что нет буфера.

...