鱼C论坛

 找回密码
 立即注册
查看: 1733|回复: 13

[已解决]为什么scanf的第一个字符输入无效

[复制链接]
发表于 2020-3-7 20:52:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么第一次输入时a没有反应总是为0
#include <stdio.h>

int main()
{
        float h,H;
        int n,N,a,b,;

        printf(“输入h”);
        getchar();
        printf(“输入N");
        scanf(”%i%i“,&a,&N);
        printf(”%d,%d“,a,N);
最佳答案
2020-3-8 09:45:36
不管你这代码语法先。
scanf之前的那个getchar()会读掉一个字符。所以你终端给的第一个字符是被getchar()读入并丢弃掉了。第二,三个分别赋值给a和N。

至于语法符号之类的编译器和编辑器的语法检查应该会很明显的提示你的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 20:54:00 | 显示全部楼层
你确定这段代码可以运行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 21:52:56 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-7 21:54 编辑

        通篇最大的问题是:所有的括号、逗号、分号都是全角的!!!
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         float h , H              ;
  5.         int n , N , a , b        ;

  6.         printf("输入h : ")       ;
  7.         scanf("%f" , & h)        ;
  8.         printf("h = %.3f\n" , h) ;
  9.         printf("输入N : ")       ;
  10.         scanf("%d" , & N)        ;
  11.         printf("N = %d\n" , N)   ;
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 23:51:22 | 显示全部楼层
本帖最后由 yexing 于 2020-3-7 23:59 编辑

这段代码还可以运行?编译就错了!
语法错误,使用全角符号,函数末尾没有右花括号...
改正如下:
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         float h, H;
  5.         int n, N, a, b;
  6.        
  7.         printf("输入h: ");
  8.         scanf("%f", &h);  //不要用getchar获取内容,如果硬要用要这样:h = getchar();
  9.         printf("输入N: ");
  10.         scanf("%d%d", &a, &N); //???明明写着输入N却还有a,这里我保留源代码思路,不作修改
  11.         printf("%d, %d", a, N);
  12.        
  13.         return 0;
  14. }
复制代码

注意你的符号必须为半角符号,也就是英文输入状态下的符号。
编程必须 Speak English!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 23:55:48 | 显示全部楼层
先不说你这个;打的就有点离谱
而且“当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 09:45:36 | 显示全部楼层    本楼为最佳答案   
不管你这代码语法先。
scanf之前的那个getchar()会读掉一个字符。所以你终端给的第一个字符是被getchar()读入并丢弃掉了。第二,三个分别赋值给a和N。

至于语法符号之类的编译器和编辑器的语法检查应该会很明显的提示你的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 14:49:32 | 显示全部楼层
zltzlt 发表于 2020-3-7 20:54
你确定这段代码可以运行?

简略的打了一下有疑问的地方不可以复制太麻烦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 14:50:06 | 显示全部楼层
jackz007 发表于 2020-3-7 21:52
通篇最大的问题是:所有的括号、逗号、分号都是全角的!!!

简略的打了一下有疑问的地方不可以复制太麻烦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 14:50:37 | 显示全部楼层
yexing 发表于 2020-3-7 23:51
这段代码还可以运行?编译就错了!
语法错误,使用全角符号,函数末尾没有右花括号...
改正如下:

简略的打了一下有疑问的地方不可以复制太麻烦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 14:54:42 | 显示全部楼层
叫我miniQ 发表于 2020-3-7 23:55
先不说你这个;打的就有点离谱
而且“当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键 ...

简略的打了一下有疑问的地方不可以复制太麻烦
我不太明白这句话的意思?连按两次回车?不行啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 14:57:15 | 显示全部楼层
major_lyu 发表于 2020-3-8 09:45
不管你这代码语法先。
scanf之前的那个getchar()会读掉一个字符。所以你终端给的第一个字符是被getchar() ...

简略的打了一下有疑问的地方不可以复制太麻烦,抱歉。
所以只有scanf分开写在编译的时候才可以分两行么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 14:59:09 | 显示全部楼层
等回复就给6#major_lyu吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 16:11:28 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     float h, H;
  5.     int n, N, a, b;

  6.     printf("输入h:\n");
  7.     //getchar(); //getchar是从终端获取一个字符,读取的数据按字符处理
  8.     //读取float类型的数据应该用scanf
  9.     scanf("%f", &h);
  10.     printf("输入a和N:\n");
  11.     scanf("%d %d", &a, &N);
  12.     printf("%d,%d", a, N);
  13.     return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-8 20:39:58 | 显示全部楼层

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 05:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表