簡體   English   中英

以特定方式打印名稱

[英]Print Out Name In Specific Way

我必須編寫一個代碼,打印出第一個姓氏,如下所示:Smith, A.

到目前為止,我已經嘗試了各種技術,並且不小心創建了一個無限的“for”循環,我相信,盡管我不是 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。”我不知道如何擺脫毛刺

您必須停止在有效數據的末尾而不是數組的末尾輸出姓氏:

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;
}

這具有不受任何緩沖區溢出問題影響的獨特優勢 - 因為沒有緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM