2017-09-16 189 views
-4

我有用於查找範圍內的素數的代碼。如何刪除逗號分隔的一個範圍內的最後一個逗號?

問題是要刪除最後一個逗號。

#include<stdio.h> 

int main() 
{ 
    int a,b,i,x,c,f=1; 
    scanf("%d%d",&a,&b); 
    for(x=a;x<=b;(x++,f=0)) 
    { 

     for(i=2;i<x;i++) 
     { 
      if(x%i==0) 
      { 
       f=1; 
      } 
     } 

     if(f==0) 
      printf("%d,",x); 
    } 
    } 

但是輸出最後包含一個額外的逗號。 例如

2,3,5,7,

而期望輸出是

2,3,5,7

+5

只是不要打印?那麼就不需要刪除它。 – alk

+3

打印'「2」'(或以先到者爲準),然後爲每個後面的素數打印'「,%d」'。 – Yunnosch

+0

這就是所需的輸出。 –

回答

1
#include<stdio.h> 

int main() 
{ 
    int a,b,i,x,c,f=1; 
    char backspace = 8; 

    scanf("%d%d",&a,&b); 
    for(x=a;x<=b;(x++,f=0)) 
    { 

     for(i=2;i<x;i++) 
     { 
      if(x%i==0) 
      { 
       f=1; 
      } 

     } 
     if(f==0) 
      printf("%d,",x); 
    } 
    printf("\b"); // or printf("%c", backspace); 
    } 
+0

這對我的[TTY](https://en.wikipedia.org/wiki/Teleprinter)無效! ;-) – alk

1

添加另一個標誌,只是一個簡單的計數器,告訴你是否第一次打印,然後檢查該標誌決定要打印什麼,例如

#include<stdio.h> 

    int main() 
    { 
     int a,b,i,x,c,first=0,f=1; 
     scanf("%d%d",&a,&b); 
     for(x=a;x<=b;(x++,f=0)) 
     { 

      for(i=2;i<x;i++) 
      { 
       if(x%i==0) 
       { 
        f=1; 
       } 
      } 

      if(f==0) 
       { 
        if(first==0){ 
         printf("%d",x); 
        }else{ 
         printf(",%d",x); 
        } 
        first++ 
       } 
     } 

    } 
1

使用標誌來檢測的printf()的第一次出現,並打印所述第一數目爲這樣沒有任何,。連續號碼印刷之前加上,

#include<stdio.h> 

int main() 
{ 
    int a,b,i,x,c,f=1,flag=0;//Flag to mark first occurrence 
    scanf("%d%d",&a,&b); 
    for(x=a;x<=b;(x++,f=0)) 
    { 

     for(i=2;i<x;i++) 
     { 
      if(x%i==0) 
      { 
       f=1; 
       break;// Once the condition fails can break of the for loop as it fails for the prime number condition at the first case itself 
      } 

     } 
      if(f==0) 
      { 
      if(flag==0) 
      {//Check if it is first time 
       printf("%d",x); 
       flag = 1;//If so print without ',' and set the flag 
      } 
      else 
       printf(",%d",x);// On next consecutive prints it prints using ',' 
      } 
     } 
    } 

這種方法還避免了,當打印只有一個號碼。

例如:當輸入爲2和4。它打印只是3而不是3,

2

相反標誌,你可以直接將需要數

之間打印

,請注意您可以擺脫什麼決定一旦f設置爲1,內部迴路即可。

#include<stdio.h> 

int main() 
{ 
    int a,b,i,x,c,f=1; 
    const char* delim = ""; 
    scanf("%d%d",&a,&b); 
    for(x=a; x<=b; (x++,f=0)) 
    { 
     for(i=2; i<x; i++) 
     { 
      if(x%i==0) 
      { 
       f=1; 
       break; //no need to continue the checking 
      } 
     } 

     if(f==0) { 
      printf("%s%d",delim,x); 
      delim = ", "; 
     } 
    } 
    putchar('\n'); 
} 
+0

抱歉錯誤編輯... –

0

只需要奇數的最佳實踐,以獲得最小回路如下;

#include<stdio.h> 
int main() 
{ 
    int a,b,i,x,c,f=1; 
    scanf("%d%d",&a,&b); 

    while (a < b) 
    { 
     if ((a%2) == 1) { 
      printf("%d", a); 
      if ((a + 1) < b && (a + 2) < b) 
       printf(","); 
     } 
     a = a + 1; 
    } 
} 

請從網站 http://rextester.com/MWNVE38245

0

商店檢查的結果,到緩衝區中,當進行打印緩衝區:

#include <stdio.h> 
#include <errno.h> 

#define RESULT_MAX (42) 

size_t get_primes(int * result, size_t result_size, int a, int b) 
{ 
    int i, x, f = 1; 
    size_t result_index = 0; 

    if (NULL == result) || (0 == result_size) || ((size_t) -1 == result_size)) 
    { 
     errno = EINVAL; 
     return (size_t) -1; 
    } 

    for (x = a; x <= b; (x++, f = 0)) 
    { 
     for (i = 2; i < x; i++) 
     { 
      if (x % i == 0) 
      { 
       f = 1; 
       break; 
      } 
     } 

     if (f == 0) 
     { 
      result[result_index] = x; 
      ++result_index; 
      if (result_size <= result_index) 
      { 
       fprintf(stderr, "Result buffer full. Aborting ...\n"); 
       break; 
      } 
     } 
    } 

    return result_index; 
} 

int main(void) 
{ 
    int a = 0, b = 0; 
    int result[RESULT_MAX]; 

    scanf("%d%d", &a, &b); 

    { 
     size_t result_index = get_primes(result, RESULT_MAX, a, b); 

     if ((size_t) -1 == result_index) 
     { 
      perror("get_primes() failed"); 
     } 
     else if (0 == result_index) 
     { 
      fprintf(stderr, "No primes found.\n"); 
     } 
     else 
     { 
      printf("%d", result[0]); 

      for (size_t i = 1; i < result_index; ++i) 
      { 
       printf(", %d", result[i]); 
      } 
     } 
    } 

    return 0; 
} 

此示例使用一個簡單的固定大小的緩衝區,如果這不適合你的需求用動態的替代它。

0

這更像是一個「語言不可知」的問題:「如何輸出逗號分隔的列表而沒有最終的逗號?」它不是專門針對素數的。

你似乎在想你的名單作爲一系列[prime comma]單位。事實並非如此。一個更好的方式是將其作爲一個單獨的prime作爲列表的頭部,然後是重複的[comma prime]個單元的尾部。

一些僞代碼來說明的總體思路:

outputList(theList) 
    separator = ", " 
    output(theList.firstItem()) 
    while (theList.hasMoreItems()) 
    output(separator) 
    output(theList.nextItem()) 
    endwhile 
return