【问题标题】:How does following statement produce spaces?以下语句如何产生空格?
【发布时间】:2020-03-23 05:46:19
【问题描述】:

我的程序“upper”试图做的是使字母大写。它从命令行获取一个文件作为 argv;然后读取它,然后将它们变为大写。

示例:example.txt 文件中的“我想知道它是否有效”。在命令行中:

C:\Users\...>upper example.txt 
I WONDER IF IT WORKS

这是我首先使用的代码:

int main (int argc, char *argv[]){
    FILE * fp;
    int ch;

    if ((fp = fopen (argv[1] , "r+")) == NULL) {
        fprintf (stderr , "Can not be opened.");
        exit(EXIT_FAILURE);
    } 

    while((ch = getc(fp)) != EOF){
        if (isalpha(ch))
            putchar(toupper(ch));
        else                       
            putchar(' ');
    }

    fclose(fp);
    return 0; 
}

它有效,但我看到了一个更简洁的版本,不需要else 语句。

while((ch = getc(fp)) != EOF){
    putchar(toupper(ch));
}

它也在每个单词之间放置了空格。这怎么可能?

【问题讨论】:

    标签: c string file


    【解决方案1】:

    来自documentation

    int toupper(int c);
    

    如果c 是小写字母并且具有大写等效项,则将c 转换为等效的大写字母。 如果无法进行此类转换,则返回的值为c 不变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 2015-05-03
      相关资源
      最近更新 更多