#3562: 應如何讓迴圈結束


ChengFuLin (TofuLin)

學校 : 國立臺灣海洋大學
編號 : 11341
來源 : [218.167.128.14]
最後登入時間 :
2010-09-15 20:38:12
a001. 哈囉 -- Brian Kernighan | From: [218.167.223.5] | 發表日期 : 2010-03-21 18:01

以下是我寫的程式碼,在函數 READ_INPUT 內的 while 迴圈,我要怎麼做才能讓它不要繼續讀。 

當我輸入完三個字串後,再按一次換行,我想讓它結束,但是判斷 gets(TEMP) != NULL 沒辦法達成。

我有試一次 scanf("%s", TEMP) != EOF 似乎也不行,還是我哪裡寫錯了呢?

 可以幫我看看嗎?

/*
Input:
  world
  c++
  Mary

Output:
  hello, world
  hello, c++
  hello, Mary
*/

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

char **INPUT;

char *STRING_CONNECT(char *NOW_INPUT){
 
 char *HELLO;

 HELLO = (char *) malloc(sizeof(char *));

 strcpy(HELLO, "hello, ");

 strcat(HELLO, NOW_INPUT);

 return HELLO;
}

void READ_INPUT(void){
 
 char *TEMP;

 char **NEXT;

 int STRING_NUM = 1;

 TEMP = (char *) malloc(sizeof(char *));

 NEXT = INPUT;

 while( gets(TEMP) != NULL){

  ++STRING_NUM;
  
  strcpy(*NEXT, STRING_CONNECT(TEMP));
  
  INPUT = (char **) realloc(INPUT, sizeof(*INPUT) * STRING_NUM);

  NEXT = INPUT + (STRING_NUM - 1);

  *NEXT = (char *) malloc(sizeof(**INPUT));

 }

}

int main(void){
 
 INPUT = (char **) malloc(sizeof(char **));

 *INPUT = (char *) malloc(sizeof(char *));

 READ_INPUT();

 return 0;
}

 
#3563: Re:應如何讓迴圈結束


ChengFuLin (TofuLin)

學校 : 國立臺灣海洋大學
編號 : 11341
來源 : [218.167.128.14]
最後登入時間 :
2010-09-15 20:38:12
a001. 哈囉 -- Brian Kernighan | From: [218.167.223.5] | 發表日期 : 2010-03-21 18:04

我這個程式還沒寫完,只是要 debug 它是否能讀入輸入的字串,並結束。

 
#3564: Re:應如何讓迴圈結束


linishan (L)

學校 : 國立交通大學
編號 : 1090
來源 : [104.132.150.102]
最後登入時間 :
2019-05-10 19:57:54
a001. 哈囉 -- Brian Kernighan | From: [125.228.226.213] | 發表日期 : 2010-03-21 21:52

以下是我寫的程式碼,在函數 READ_INPUT 內的 while 迴圈,我要怎麼做才能讓它不要繼續讀。 

當我輸入完三個字串後,再按一次換行,我想讓它結束,但是判斷 gets(TEMP) != NULL 沒辦法達成。

我有試一次 scanf("%s", TEMP) != EOF 似乎也不行,還是我哪裡寫錯了呢?

 可以幫我看看嗎?

/*
Input:
  world
  c++
  Mary

Output:
  hello, world
  hello, c++
  hello, Mary
*/

#include
#include
#include

char **INPUT;

char *STRING_CONNECT(char *NOW_INPUT){
 
 char *HELLO;

 HELLO = (char *) malloc(sizeof(char *));

 strcpy(HELLO, "hello, ");

 strcat(HELLO, NOW_INPUT);

 return HELLO;
}

void READ_INPUT(void){
 
 char *TEMP;

 char **NEXT;

 int STRING_NUM = 1;

 TEMP = (char *) malloc(sizeof(char *));

 NEXT = INPUT;

 while( gets(TEMP) != NULL){

  ++STRING_NUM;
  
  strcpy(*NEXT, STRING_CONNECT(TEMP));
  
  INPUT = (char **) realloc(INPUT, sizeof(*INPUT) * STRING_NUM);

  NEXT = INPUT + (STRING_NUM - 1);

  *NEXT = (char *) malloc(sizeof(**INPUT));

 }

}

int main(void){
 
 INPUT = (char **) malloc(sizeof(char **));

 *INPUT = (char *) malloc(sizeof(char *));

 READ_INPUT();

 return 0;
}


只要 while(gets(TEMP)) 即可

 

至於結束字元是...

鍵盤 Ctrl+Z

 
ZeroJudge Forum