垃圾邮件在输出字符串C后面附加

时间:2017-07-10 11:36:42

标签: c arrays string

我刚刚开始编码,我正在制作如下程序, 我从用户那里拿了三个字符串,例如

this is
is what
new

输出大写的每个单词的第一个字母,然后输出''和一个' ' (空间角色)

所以输出应该是

T. I.
I. W.
N.

所以我得到的输出是

T. ‚. xWô¿Œ
@ 
I. W. ô 
N. ÿÿÿ 

我得到了值但是最后还附加了一些垃圾值,我尝试在最后添加NULL,但这并没有帮助。

代码如下:

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

int countWords(char* arr);
int main(void){
    int i = 0, j = 0, count[3], num = 0, pos = 0, flag = 0;
    char val[3][50], copyName[3][50];
    for(i =0; i< 3; i++){
        printf("Enter: \n");
        scanf("%[^\n]%*c", &val[i]);
        num = countWords(val[i]);
        //printf("%d word(s) \n", num);
    }

    for(i = 0; i<3; i++){
        pos = 0;
        flag = 0;
        for(j = 0; j<strlen(val[i]); j++){
            if(j == 0 || val[i][j - 1] == ' '){
             copyName[i][j] = toupper(val[i][pos]);
             pos++;
             copyName[i][pos] = '.';
             pos++;
             copyName[i][pos] = ' ';
             pos++;
             flag++;
             if(flag == count[i])
                copyName[i][pos] = '\0';
            }
            else{
                continue;
            }
        }
        printf("%s \n", copyName[i]);
    }

    return 0;
}

int countWords(char* arr){
    int i = 0, flag = 0;
    for(i = 0; arr[i] != '\0' ; i++){
        if(arr[i] == ' ')
            flag++;
    }

    return flag+1;
}

如果对我想达到的目标有更好的方法,请分享。感谢

代码编辑,请看一下。

1 个答案:

答案 0 :(得分:0)

这是程序逻辑中的一个错误,谢谢大家,谁为这个问题做出了贡献

代码如下:

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<conio.h>

int countWords(char* arr);
int main(void){
    int i = 0, j = 0, count[3], num = 0, pos = 0, flag = 0;
    char val[3][50], copyName[3][50];
    clrscr();
    for(i =0; i< 3; i++){
    printf("Enter: \n");
    scanf("%[^\n]%*c", &val[i]);
    num = countWords(val[i]);
    count[i] = num;
    printf("%d word(s) \n", num);
    }

    for(i = 0; i<3; i++){
    pos = 0;
    flag = 0;
    for(j = 0; j<strlen(val[i]); j++){
       // printf("  %d",strlen(val[i]));
        if(j == 0 || val[i][j - 1] == ' '){
         copyName[i][pos] = toupper(val[i][j]);
         pos++;
         copyName[i][pos] = '.';
         pos++;
         copyName[i][pos] = ' ';
         pos++;
         flag++;
        // printf("   %d", flag);
         if(flag == count[i])
           //   printf("Put an end");
        copyName[i][pos] = '\0';
        }
        else{
        continue;
        }
    }
    printf(" \n %s \n", copyName[i]);
    }

    return 0;
}

int countWords(char* arr){
    int i = 0, flag = 0;
    for(i = 0; arr[i] != '\0' ; i++){
    if(arr[i] == ' ')
        flag++;
    }

    return flag+1;
}