一种比较简洁的C语言写法

字符串最后一个单词的长度

http://www.nowcoder.com/questionTerminal/8c949ea5f36f422594b306a2300315da

我觉得,一下这个应该是我写出来的比较简单的一种写法了哈哈哈哈哈哈!!!!!已经调试过了请放心用。
小小的总结一下:
1,scanf()函数,如果转换说明是%s的话,他的读取规则是,“读取除空白以外的所有字符串”。scanf()函数跳过空白开始读取第一个非空白字符,并保存非空白字符直到再次遇到空白字符。也就是说!!!!scanf()函数根据%s转换说明读取一个单词!!!
2,EOF,EOF是stdio.h文件里定义的特殊值,通常情况下#define指令会把EOF定义为“-1”,当scanf()读取到文件结尾时,就会返回EOF(如果是转换说明错误好像是会返回“0”)

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

int main()
{
    char str[1000];
    int a=0,i=0;

    while(scanf("%s",str) != EOF)
    {}
    a=strlen(str);
    printf("%d",a);
}
全部评论
我用你的程序,一直在scanf 走不到a=strlen
1 回复 分享
发布于 2021-06-22 15:03
输入时一般是换行结束输入,所以最后不能跳出while循环吧
1 回复 分享
发布于 2021-08-30 19:46
可以理解为scanf函数一直读取,遇到空格停止。但由于后面的eof,字符串还没结束。循环过来后继续scanf,相当于空格后面的一个单词。而且每次scanf对str相当于重新读写。读到最后一个单词就结束循环,最后的str就是最后的一个单词。str长度设置10也行,一个单词长度差不多了。
22 回复 分享
发布于 2021-04-02 12:47
为啥我运行是死循环啊
6 回复 分享
发布于 2020-08-26 22:05
为什么我运行你的解法,他一直在while里面转,就走不到a=strlen啦?
6 回复 分享
发布于 2021-03-02 16:40
为什么strlen(str)得出的是最后一个字符串的长度啊?
5 回复 分享
发布于 2020-04-10 18:29
不考虑内存越界的方法都是垃圾。
3 回复 分享
发布于 2021-07-28 14:14
从后往前读,遇到空格后停止计数,返回数值是不是要简单的多
2 回复 分享
发布于 2021-09-14 12:38
我试了,在线编程能过,用编译器过不了,这个代码可能有问题
2 回复 分享
发布于 2022-06-06 15:44
这个方法是如果用编译器写代码的化,要在输入结尾模拟文件结尾才行,ctrl+Z,才会得到EOF结束循环,不然就跳不出whille循环了
2 回复 分享
发布于 2023-03-08 10:47 河北
这个EOF的用法真是学习到了
1 回复 分享
发布于 2020-04-01 23:21
牛逼
1 回复 分享
发布于 2021-05-14 23:21
定义了个i变量没用到呀
1 回复 分享
发布于 2021-09-06 23:28
在线编程的是采用文件输入参数的吗?在ubuntu的终端界面执行程序会在scanf那无限循环,当采用文件重定向输入时,因为读到文件尾,从而结束循环,打印正确的数值了
1 回复 分享
发布于 2021-10-09 10:37
哇,我也想这样来着,可是手头没电脑没法调试,老不知道什么条件下能跳出while循环,可惜了
点赞 回复 分享
发布于 2020-04-01 23:20
学到了学到了,腻害!
点赞 回复 分享
发布于 2020-08-07 17:50
那如果想要读取所有的字符串要怎么办呀
点赞 回复 分享
发布于 2021-02-23 20:29
太聪明啦,同学!!谢谢你的解法
点赞 回复 分享
发布于 2021-03-01 16:00
题目限制长度可以达到 5000,如果一个用例就是一个 5000 字节的单词,内存就溢出了
点赞 回复 分享
发布于 2021-03-25 23:11
跟我的想法一样,哈哈!
点赞 回复 分享
发布于 2021-06-12 17:00

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
295 81 评论
分享
牛客网
牛客企业服务