标题:code blocks 写的不能运行 错误叫permission denied
只看楼主
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
得分:0 
回复 10楼 wp231957
这。。。。。
2012-12-08 13:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:15 

授人以渔,不授人以鱼。
2012-12-08 14:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
程序代码:
/*
Description
在C语言中,将ASCII字符集中的制表符('\t')、回车符('\r')、换行符('\n')、垂直制表符('\v')、换页符('\f')和空格字符(' ')称作空白符。

你的任务是读入每行字符串,去掉行首和行尾的连续空白符,但是在任意非空白符中间的空白符不要去除。

Input
输入为多行,每行为一个串(不超过100个字符),至某行输入的非空白符仅为“END”结束。

Output
输出为多行,为每行输入的去掉前后空白符的串。“END”也输出。

Sample Input
abcdefg
    12345678
XYZ
abc 123
   END
Sample Output
abcdefg
12345678
XYZ
abc 123
END
HINT

头文件ctype.h中有isspace函数对空白符进行检测,若一个字符为空白符之一则返回真。


Append Code

*/

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

const char* str_trim(char* s);

int main(int argc, char* argv[])
{
    const char* filename = "Text.txt";
    const size_t max_length = 100;

    FILE* file;
    errno_t errno = fopen_s(&file, filename, "rt");
    if (errno != 0)
    {
        Pause("Data file open failure!");
        return 1;
    }
    while (!feof(file))
    {
        char buffer[max_length + 1];
        if (fgets(buffer, max_length, file) != NULL)
        {
            const char* result = str_trim(buffer);
            printf_s("%s\n", result);
            if (strcmp(result, "END") == 0)
            {
                break;
            }
        }
    }
    fclose(file);

    Pause("Press any key to continue...");
}

const char* str_trim(char* s)
{
    if (*s == '\0')
    {
        return s;
    }

    char* pStart = s;
    char* pEnd = s + (strlen(s) - 1);
    while ((*pStart != '\0') && isspace(*pStart++))
    {
        ;
    }
    if (*pStart-- != '\0')
    {
        while (isspace(*pEnd--))
        {
            ;
        }
        *(pEnd + 2) = '\0';
    }
    else
    {
        *pStart = '\0';
    }
    return pStart;
}

授人以渔,不授人以鱼。
2012-12-08 14:25
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
得分:0 
我又调试了下,发现问题是在最后一次for循环中,我写这个循环的目的是从'\0'开始推,然后把碰到的第一个非空格符的后一个字符改成'\0',这样就把后面的空格符消去了,但是调试发现貌似那个if语句没有起作用,只要到了if那就会判断进去break。问老师老师让我自己写个函数。。我去。。求解啊 各位
2012-12-08 20:42
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
得分:0 
回复 13楼 TonyDeng
你写的我看不懂哎  我才大一
2012-12-08 20:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你从后往前找,思路固然对,有这样的思路还看不懂我写的那个也有从后往前找的部分?那么前面的空字符怎么过滤?不还要从前找过去吗?然后,如果遇到整个是空字符构成的空串,怎么办?如果是没有字符的字符串呢?这些各种各样的字符串都传过去试试,效果对了就能对。

授人以渔,不授人以鱼。
2012-12-08 21:58
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
得分:0 
回复 16楼 TonyDeng
你的我真看不懂,刚学了一个学期,自定义函数就学了两种,int 和void,我们才讲到递归和嵌套。

字符串前面的空白符消法我就不赘述了,字符串后面的我就是逆向一个个字符读到isspace返回0,最后的for循环就是为了这么办,等到了非空白符if就返回0了。但是那个if语句不知道为什么在空白符的时候就开始返回0了,搞得我调试的时候发现如果字符串后面有一串空格的话后面的空格消不掉。感觉就像逆向的时候isspace失效一样,我问老师老师说让我自己写个函数,别用isspace,但我就想搞明白到底是哪的问题,因为我读了一遍遍代码,自己想的应该是没问题,但为什么一运行起来最后了if语句就是不发挥作用。。

这么个小题麻烦您这么久我还弄不懂,真是不好意思。
2012-12-09 00:13
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
得分:0 
回复 16楼 TonyDeng
简单说就是最后的if语句没有起我希望他起的作用。。。。
2012-12-09 00:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你这种代码是干嘛的?
            temp=isspace(str[i]);
            if (temp!=8)
isspace()函数只返回真假即0/1,你去与8判断?这个函数只告诉你,str[i]这个字符是否空格字符,即题目叙述中所讲述的那些一系列字符,并非仅仅是空格,你从这个函数得到的,只是参数中的那个字符是不是符合判断条件,所以使用上只要它返回真,你就应该把这个字符抛弃。你认真看我的代码,我就是按照题目的要求使用isspace()函数,你用我现在说的这个函数的机制来理解就明白了。你所说的看不懂,其实是你不知道那些函数的真正意义。既然学到递归,必然知道指针,我那些仅仅是字符指针最基本的用法而已,不会很难懂的。strcmp()函数是比较两个字符串是否相同的,这个应该用到,可以用的,返回0表示两个字符串完全相同。

授人以渔,不授人以鱼。
2012-12-09 00:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
你看题目本身已经教了你isspace()函数的用法,也告诉你返回的是真假值。

头文件ctype.h中有isspace函数对空白符进行检测,若一个字符为空白符之一则返回真。


这里所说的“空白符”,就是最前面讲述的那一系列字符。

[ 本帖最后由 TonyDeng 于 2012-12-9 01:05 编辑 ]

授人以渔,不授人以鱼。
2012-12-09 00:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-389966-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.281312 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved