码迷,mamicode.com
首页 > 其他好文 > 详细

%s和%c的奥秘

时间:2015-05-23 10:01:29      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

题目来源:

单链表的链接(0954)

Time limit(ms): 1000
Memory limit(kb): 10000
Submission: 4599
Accepted: 1862
Accepted
 

建立长度为n的单链表A和长度为m的单链表B,n>0,m>0。编程实现将B表链接在A表的尾端,形成一个单链表A。数据类型指定为字符型。

Description

第一行为A表的长度n; 第二行为A表中的数据元素 第三行为B表的长度m; 第四行为B表中的数据元素。

Input

输出为链接好后的A表中的所有数据元素。

Output
1
2
3
4
5
4
A B C D
6
1 2 3 4 5 6
 
Sample Input
1
A B C D 1 2 3 4 5 6
Sample Output
 

AC源代码:

#include<stdio.h>
int main()
{
        int n,m,i;
        char a[100],b[100];
        scanf("%d",&n);
        getchar();
          for(i=0;i<n;i++)
       {
             scanf("%s",&a[i]); //%s,用%c的话会在输入时出现问题
        }
        scanf("%d",&m);
        getchar();
        for(i=0;i<m;i++)
       {
              scanf("%s",&b[i]); //用%s
        }
        for(i=0;i<n;i++)
        printf("%c ",a[i]);
        for(i=0;i<m;i++)
       {
             if(i!=m-1)
           printf("%c ",b[i]);
         else
           printf("%c",b[i]);
         }
         return 0;

}

 

 

关于%c和%s:

scanf函数 字符串输入问题

c)书上有这样一段代码
char c[];,不需要‘%s&quot,c);么;

scanf("
输入的时候把字符串带如字符数组;
两者之间什么区别;%s";&‘,带入时才不需要&#39,&c);?
是不是只有字符串比较特殊;%s"&&#39?
scanf("
scanf(&quotchar c[81],至多接收80个字符; &#47,只能接收一个字符;&#47,前面没有&。

2 输出字符串;
scanf("c定义为字符数组,格式符用%d; /
scanf(&quot,格式符用%c,c)分两种情况来说明。
char c;,前面有&;/;%c&quot,&c);%s"c定义为字符变量。
1 输入字符
这是不加&. scanf在用%s时。
2,不用&,再加&就错误了1,也错了,那么这个字符必须加&,才能放入相应字符变量的地址里,因为字符数组的名字本身就代表是这个数组的首地址,是输入一个字符.用%c时,已经是地址了,是指输入一个字符串
第一个问题:
scanf 函数后一个参数实际上是地址,
而数组名的真正含义就是一个地址,所以不用加&取地址运算符。

第二个问题:
scanf("%s",&c); //表示你要取C的地址,而c如果是一个变量,就可以取出地址,总之你要明白scanf后一个参数实际上是地址,c 和&c的区别在于,c本身是不是地址。
scanf函数需要的是一个地址,如果是一个变量如a,&a代表a的地址,现在你定义的是一个字符数组,字符数组名本身代表了该字符数组的首地址,也就是第一个元素的地址,所以不需要再去&.

 

 

另一个地方关于这个问题的解答:

C语言scanf函数输入单个字符%c用%s代替

voidmain()
{
inti;
intnum[35],order[35];
charflag;
floata[35][6]={0};
input(num,a);
count(a);
sort(a,order);
printf("该程序可以筛选用户指定课程成绩在90分(含90分)以上,并且总分为前五名的学生情况,是否需要查询?(y/n)");
scanf("%s",&amp;flag);
if(flag==‘y‘)serch(num,a,order);
getchar();
getchar();
getchar();
}

这是我的主函数,另外的子函数没考过来,问题在于scanf那句,如果我用%c,运行有逻辑问题,你输入y后,好像程序根本就没有输入数据,我把%c换成%s就可以了,绝对无误。以前也遇到好多这种情况,这样换屡试不爽,可是我不清楚到底怎么回事。还有如果我把前面的子函数都删掉,上了就scanf,用%c是可以的,不知道这是怎么回事。高手给指点一二
 
 

满意答案

 
原因是在你的input函数里面有接受用户输入的动作,而输入一定是以回车结束,那么这个回车就会残留在缓存中,而当你的scanf读取flag的时候,程序会自动获取前面的那个回车符号,这就是用%c会自动跳过的原因,而用%s的话,程序就会等待下一行输入,回车符号并不会被接收

建议你在scanf("%c",&flag);修改为:
fflush(stdin);//清空缓存
scanf("%c",&flag);
就不会有问题了

%s和%c的奥秘

标签:

原文地址:http://www.cnblogs.com/try-my-best/p/4523661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!