C - I / O - 打印出句子结构的字符数组

时间:2014-03-12 17:33:05

标签: c arrays io char

所以我正在接受这样的文本文件:

Hello. This is my test! I need to print sentences.
Can I do it? Any help is welcomed. Thanks!

我正在尝试输出:

1. Hello.
2. This is my test!
3. I need to print sentences.
4. Can I do it?
...and so on....

这是我到目前为止所写的内容:

#include <stdio.h>
#include <stdlib.h>
  main() {
     int storage[50];
     int i = 0 ;
     int linecount = 1 ;
     char c;

     for (;;) {
      c=getchar();
      if(c == '\n'){
        c == '\0';}
      storage[i] = c;
      i++;

      if (c == '.' || c == '!' || c == '?') {
        int j ;
        printf("%d. ", linecount++);
        for (j = 0; j < i; j++) {
         printf("%c", storage[j]); }
        i = 0 ;
        printf("\n");
      }
   }
 }

结果是输出结果:

1. Hello.
2.  This is my test!
3.  I need to print sentences.
4. 
Can I do it?
5.  Any help is welcomed.
6.  Thanks!

我的第一个问题是它打印了一个&#39; \ n&#39;对于第4行,我认为我的代码是:

if(c == '\n'){
  c == '\0';}

会照顾这个,但事实并非如此。

我的第二个问题是它在第一条记录后添加了额外的空格字符。 我知道这是因为我使用了print语句:

"%d. "

并且句子的开头还有一个与最后一句话分开的空间,但我不确定如何解决这个问题。任何帮助都会很棒!谢谢! -qorz

3 个答案:

答案 0 :(得分:0)

出现第一个问题是因为您需要使用=运算符,而不是==。您实际上是在测试值而不是将数组位置更改为\0

要解决此问题,请更改

if(c == '\n'){
    c == '\0';
}

if(c == '\n'){
    c = '\0';
}

关于第二个问题,请查看here

答案 1 :(得分:0)

此处==不是赋值运算符,请将其更改为=

if(c == '\n'){
   c = '\0'; 
}

答案 2 :(得分:0)

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

int main() {
    int storage[50];
    int i = 0 ;
    int linecount = 1 ;
    int c;

    while(EOF!=(c=getchar())) {
        storage[i++] = c;
        if (c == '.' || c == '!' || c == '?') {
            int j ;
            printf("%d. ", linecount++);
            for (j = 0; j < i; j++) {
                printf("%c", storage[j]);
            }
            printf("\n");
            i = 0 ;
            while(isspace(c=getchar()))
                ;//skip white spaces
            ungetc(c, stdin);
        }
    }

    return 0;
}