user-0 提问: scanf 关于数据中参杂逗号的读取方法

回复:
user: user-1
content: 再供参考：#include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }  #include <stdio.h> #include <string.h> char s[80]; double d; char c; int main() {     while (1) {         printf("Input a double:");fflush(stdout);         rewind(stdin);         fgets(s,80,stdin);         if (strlen(s)>20) {             printf("Input too long(>20)!\n");             continue;         }         if (2==sscanf(s,"%lf%c",&d,&c)) {             if ('\n'==c) {                 printf("%lg is a double.\n",d);                 break;             }         }         if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;         printf("\"%s\" is NOT a double!\n",s);     }     return 0; }

user: user-2
content: 引用 3 楼 weixin_45669978 的回复:for（int i=0;i<n;i++） {     scanf("%d,", &t.head[i]); } 用这个循环给顺序表赋值。 输入数据为:       60，68，72，75，88，95 这里的逗号影响赋值，只能赋值第一个数据，后面的都不行。 你想听我说 我可以完整读取?? 行吧 我可以完整读取 说完了

user: user-3
content: 可以直接将逗号去掉，或者一个输入之后直接回车，当然每次输入都需要按照格式来，比如1,回车，这样

user: user-4
content: LZ的scanf的格式用的是英文的逗号（"%d,"），而输入数据时用的是中文的逗号(60，68)，所以只有第一项被读入了，后面的都是0（也就是后面的读取没成功，因为不满足scanf的格式）

user: user-2
content: 引用 11 楼 weixin_45669978 的回复:你能解决，直接打出来不就好了。 就为了突显你能？ 解决问题?  有什么需要解决的? 你是不是看不懂 我能完整读取 是什么意思啊

user: user-2
content: 引用 11 楼 weixin_45669978的回复:[quote=引用 9 楼 lin5161678的回复:][quote=引用 5 楼 weixin_45669978 的回复:] 我能完整读取所有输入 给数组赋值 省略几个字就看不懂了 不是理解能力小天才吗 不是最喜欢省略的吗?[/quote] 你能解决，直接打出来不就好了。 就为了突显你能？[/quote] 能解决是一个笑话 你目前提供的信息 问题根本不成立 这样的代码完全能处理这样的输入 问题不存在 根本不需要解决

user: user-2
content: 引用 10 楼 weixin_45669978的回复:[quote=引用 9 楼 lin5161678的回复:][quote=引用 5 楼 weixin_45669978 的回复:] 我能完整读取所有输入 给数组赋值 省略几个字就看不懂了 不是理解能力小天才吗 不是最喜欢省略的吗?[/quote] 那你的回答就像，小学生遇到一道题问:你能解决这个问题吗？ 小学生回答:我能 老师给了他0分[/quote] 为什么你请教问题能请教出自己是老师的感觉 这是你布置给我的家庭作业吗 是不是还要家长签名呀 看把你能的

user: user-0
content: 引用 9 楼 lin5161678的回复:[quote=引用 5 楼 weixin_45669978 的回复:] 我能完整读取所有输入 给数组赋值 省略几个字就看不懂了 不是理解能力小天才吗 不是最喜欢省略的吗?[/quote] 你能解决，直接打出来不就好了。 就为了突显你能？

user: user-0
content: 引用 9 楼 lin5161678的回复:[quote=引用 5 楼 weixin_45669978 的回复:] 我能完整读取所有输入 给数组赋值 省略几个字就看不懂了 不是理解能力小天才吗 不是最喜欢省略的吗?[/quote] 那你的回答就像，小学生遇到一道题问:你能解决这个问题吗？ 小学生回答:我能 老师给了他0分

user: user-2
content: 引用 5 楼 weixin_45669978 的回复: 我能完整读取所有输入 给数组赋值 省略几个字就看不懂了 不是理解能力小天才吗 不是最喜欢省略的吗?

user: user-1
content: 仅供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-0
content: 引用 4 楼 lin5161678的回复:[quote=引用 3 楼 weixin_45669978 的回复:]for（int i=0;i<n;i++） {     scanf("%d,", &t.head[i]); } 用这个循环给顺序表赋值。 输入数据为:       60，68，72，75，88，95 这里的逗号影响赋值，只能赋值第一个数据，后面的都不行。 你想听我说 我可以完整读取?? 行吧 我可以完整读取 说完了[/quote] 问你能不能读取了？ 我说的是赋值问题，无语。 第一次见理解能力这么差的

user: user-0
content: for（int i=0;i<n;i++） {     scanf("%d,", &t.head[i]); } 用这个循环给顺序表赋值。 输入数据为:       60，68，72，75，88，95 这里的逗号影响赋值，只能赋值第一个数据，后面的都不行。

user: user-2
content: 就你现在这几句话 我只能回答你  我可以完整读取  完了

user: user-2
content: 发完整代码