永发信息网

c语言中的scanf 函数的用法

答案:5  悬赏:60  手机版
解决时间 2021-03-02 12:18
  • 提问者网友:了了无期
  • 2021-03-02 00:07
为什么下面的函数 输出的值只是空格前面的字符呢???急求答案!!!
#inclde<stdio.h>
void main ()
{ char s[80];
scanf("%s",s);
printf("%s",s);
}
最佳答案
  • 五星知识达人网友:低血压的长颈鹿
  • 2021-03-02 01:13
输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&。
scanf("%s",s);改为scanf("%s",&s);
scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);
格式控制字符串包含:格式控制说明,普通字符。
1、格式控制字符串表示输入的格式,(int型用%d,float用%f,double型用%lf)
2、普通字符:在输出数据的时候,按照原样输出的字符,如:"fahr=%d,celsius=%d\n"中的fahr=,celsius=。
3、输入的参数是变量的地址,所以要在变量前面加&。



扩展资料
调用scanf()函数输入数据,变量名x前面要加&,%lf中的l是long的首字母,scanf函数的输入参数必须和格式控制字符串中的格式控制说明相对应,并且它们的类型,个数和位置要一一对应。
如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号分隔,只能用空白字符(空格或tab键或者回车键)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回车)4”等。若是“%d,%d,%d”,则在输入数据时需要加“,”,如“2,3,4”。
参考资料来源:百度百科——scanf
全部回答
  • 1楼网友:刀戟声无边
  • 2021-03-02 03:51
输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&。 scanf("%s",s);改为scanf("%s",&s); scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二); 格式控制字符串包含:格式控制说明,普通字符。 1、格式控制字符串表示输入的格式,(int型用%d,float用%f,double型用%lf) 2、普通字符:在输出数据的时候,按照原样输出的字符,如:"fahr=%d,celsius=%d\n"中的fahr=,celsius=。 3、输入的参数是变量的地址,所以要在变量前面加&。 扩展资料 “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。这句话同样对 scanf 有效,即“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”一定要一一对应。比如: # include <stdio.h> int main(void) { char ch; int i; scanf("%c%d", &ch); printf("ch = %c, i = %d\n", ch, i); return 0; } 参考资料:搜狗百科 - scanf
  • 2楼网友:往事隔山水
  • 2021-03-02 03:16
scanf 后面的参数,就是要 写变量的 地址。所以 int a,b; 就要 用 &a,&b 形式来调用 scanf.可是,如果是字符串,char s[10]; scanf("%s",s); 参数 s 就 不要 &. 因为 s 就是 地址形式。scanf("%d,%d", &a, &b); 还有,你这句输入时,a b 数据之间还要加逗号。例如 12,34 因为格式里有逗号。 扩展资料: 注意问题 (1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。 (2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。 (3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。 (4) scanf函数中没有类似printf的精度控制。 如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。 (5) scanf中要求给出变量地址,如给出变量名则会出错 如 scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。 (6) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。 C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。 (7) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。 参考资料:百度百科—scanf函数
  • 3楼网友:蓝房子
  • 2021-03-02 02:04
1、空白符问题 #include<stdio.h> main() {    int a; printf("input the data "); scanf("%d ",&a);//这里多了一个回车符 printf("%d",a); return 0; } 2、回车符也占位。 #include <stdio.h> main() { int n = 5; char c[n]; for(int i = 0; i < n; i++) c[i] = scanf("%c",&c[i]);  printf(c); return 0; } 3、scanf()函数的参数输入类型不匹配问题 #include<stdio.h> main() { int a=123; char c='t'; printf("input "); scanf("%d%c",&a,&c); scanf("%d%c",&a,&c); scanf("%d%c",&a,&c); printf("%d %c ",a,c); return 0; } 扩展资料: scanf函数用%s读取一个字符串时,其实它只能读取一个单词,因为遇到空格时,它会认为输入已结束。因此一般使用fgets来读取一个字符串。如果想用scanf函数读取带有空格的字符串时,需要使用参数%[ ]来完成,它的意思是读入一个字符集合。 [ ]是个集合的标志,%[ ]特指读入此集合所限定的那些字符,比如%[A-Z]是输入大写字母,一旦遇到不在此集合的字符便停止。如果集合的第一个字符是“^”,这说明读取不在"^"后面集合的字符,既遇到"^"后面集合的字符便停止(这就是scanf函数里的正则表达式应用)。
  • 4楼网友:行路难
  • 2021-03-02 01:20
scanf 函数最主要的用法是: scanf("输入控制符", 输入参数); 功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。 用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。 如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。 扩展资料: 使用scanf()函数需要注意的问题: 1.对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。 2.可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。 3.scanf函数中没有类似printf的精度控制。 如:scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。 4.scanf中要求给出变量地址,如给出变量名则会出错 如:scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。 5.在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。 C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。 6.在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。 参考资料: 搜狗百科-scanf()函数 搜狗百科-gets()函数
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯