none
C 將字串輸入的順序顛倒輸出問題 RRS feed

  • 問題

  • 利用scanf("%d",&n);輸入要輸入字串的個數

    輸出:

    3

    Hello

    my

    friend

    輸出:

    friend

    my

    Hello

    我的程式碼:

    int main(){

        int n, c, d;

        char a[100], b[100];

      printf("Enter the number of elements in array\n");

      scanf("%d", &n);

      printf("Enter array elements\n");

      for (c = 0; c < n ; c++)

        fgets(a,sizeof(a),stdin);

      for (c = n - 1, d = 0; c >= 0; c--, d++)

        b[d] = a[c];

      for (c = 0; c < n; c++)

        a[c] = b[c];

      printf("The array after reversal:\n");

      for (c = 0; c < n; c++)

          puts(a);

      return 0;

    }

    若是將fgets及puts改成scarf、printf用數字輸入是可以的,但是要怎麼改成輸入字串,輸出相反順序的字串呢?

    2019年12月31日 下午 02:09

所有回覆

  • 您可以這樣做:

    int main()
    {
    	int i=0;
    	int n = 0;
    	char **p = 0;
    
    	printf("Enter the number of elements in array:");
    	scanf("%d", &n);
    	getc(stdin);
    
    	printf("\n");
    
    	p=(char**)calloc(sizeof(char*), n);
    	if (p != 0)
    	{
    		printf("Enter %d array elements\n", n);
    
    		for (i = 0; i < n; i++)
    		{
    			p[i] = (char*)calloc(sizeof(char), 100);
    			if (p[i] != 0)
    			{
    				fgets(p[i], 100, stdin);
    			}
    		}
    		for (i = n-1; i >= 0; i--)
    		{
    			puts(p[i]);
    			free(p[i]);
    		}
    		free(p);
    	}
    	return 0;
    }

    2020年1月1日 上午 01:06
  • 這樣的話free的部分都會顯示錯誤呢
    2020年1月1日 上午 11:35
  • 什麼錯誤訊息? 我用Visual C++ 2017建置專案再執行, 沒有看到錯誤訊息
    2020年1月1日 下午 12:00
  • free顯This function declaration is not a prototype (Mac Xcode)

    free跟calloc顯示was not found in this scope(Windows Dev-C++)

    2020年1月1日 下午 12:26
  • 因為您使用Dev C++, 所以您需要查明free和calloc需要的header file, 並做好include必要的header file的動作
    2020年1月2日 上午 12:44
  • 改成這樣寫試看看:

    int main()
    {
    	int i=0;
    	int n = 0;
    	char **p = 0;
    
    	printf("Enter the number of elements in array:");
    	scanf("%d", &n);
    	getc(stdin);
    
    	printf("\n");
    
    	p=new char*[sizeof(char*), n];
    	if (p != 0)
    	{
    		printf("Enter %d array elements\n", n);
    
    		for (i = 0; i < n; i++)
    		{
    			p[i] = (char*)calloc(sizeof(char), 100);
    			if (p[i] != 0)
    			{
    				fgets(p[i], 100, stdin);
    			}
    		}
    		for (i = n-1; i >= 0; i--)
    		{
    			puts(p[i]);
    			delete p[i];
    		}
    		delete p;
    	}
    	return 0;
    }
    

    2020年1月3日 上午 01:36