使程序读取行而不是单个字符

时间:2016-11-29 16:12:12

标签: c for-loop switch-statement fgets

我有问题。我写了一个根据所选参数改变输入的程序。程序是我希望它工作的方式,但它不被接受,因为它需要整行工作( fgets 我相信)而不是逐个字符。第二件事是它应该在main函数中打印值。 我不能解决这些问题,我可以得到一些帮助。

  

的main.c

#include <stdlib.h>
#include <stdio.h>
#include "WordTools.h"

int main(int argc, char *argv[]) {
    char string[1000];
    size_t i = 0;

    while (i < sizeof string) {
        int ch = getchar();
        if (ch == EOF) break;
        string[i] = ch;
        i++;
    }
    string[i] = 0;

    switch (argc > 1 && argv[1][1]) {
    case 'l':
    case 'L':
        makeLower(string);
        break;
    case 'u':
    case 'U':
        break;
    case 'c':
    case 'C':
        makeChange(string);
        break;
    case 'n':
    case 'N':
        makeName(string);
        break;
    default:
        makeUpper(string);
        break;
    }
    return 0;
}
  

WordTools.c

#include <stdio.h>
#include <ctype.h>
#include "WordTools.h"

void makeLower(char *s) {
    int i;
    for(i = 0; s[i] != '\0'; i++){
        s[i] = tolower(s[i]);
    }
    printf("%s", s);
}

void makeUpper(char *s) {
    int i;
    for(i = 0; s[i] != '\0'; i++){
        s[i] = toupper(s[i]);
    }
    printf("%s", s);
}

void makeChange(char *s) {
    int i;
    for(i = 0; s[i] != '\0'; i++){
        if ((s[i] >= 65) && (s[i] <= 90)) s[i] = tolower(s[i]);
        else if ((s[i] >= 97) && (s[i] <= 122)) s[i] = toupper(s[i]);
    }
    printf("%s", s);
}

void makeName(char *s) {
    int i;
    s[0]=toupper(s[0]);
    for(i = 1; s[i] != '\0'; i++){
        s[i] = tolower(s[i]);
    }
    printf("%s", s);
}

0 个答案:

没有答案