for里面的scanf语句不执行,赋值不成功
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for里面的scanf语句不执行,赋值不成功相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
#include<string.h>
#define N 3
#define M 3
struct Student
int num;
char name[20];
float score[3];
float total;
str[N];
main()
void inscore (struct Student a[],int i); //函数声明
int i,j;
printf("请按顺序输入学生的学号,姓名,数学、英语、C语言等信息:\n");
for(i=0;i<N;i++)
str[i].total=0;
scanf("%d",&str[i].num); //调试时,这里第一次循环的给输入,之后就再也不执行 →问题1
gets(str[i].name); //定义了 str[i].name[20],一定要输够20个字符回车才行→问题2
inscore(str,i);
for (j=0;j<3;j++)
str[i].total=str[i].total+str[i].score[j];
for(i=0;i<N;i++)
printf("num.%d%s:数学:%3lf,英语:%3lf,c语言:%3lf,总分:%3lf\n",str[i].num,str[i].name,str[i].score[0],str[i].score[1],str[i].score[2],str[i].total);
void inscore(struct Student a[],int i)
int j;
for(j=0;j<3;j++)
scanf("%lf",&a[i].score[j]);
编译连接0error 0warning,就是粗不来,给跪了
gets函数不会跳过任意空白符,但当只要遇到换行符就会停止,并用空字符替换换行符
所以,你的gets函数根本就没有储存信息(它读取了上次遗留的换行符而终止了)
另外
scanf("%lf")中%lf是double类型的转换说明,你定义的结构体中却是float
gets函数现在已经不推荐使用,应用fgets替代
还有你的C代码很不标准,不符合c99
你试试在你的scanf代码下面加上:
while (getchar() != '\n')
; 参考技术A 在scanf前面一行加上
fflush(stdin); //清空键盘缓存
第二个问题没太明白,输完直接回车不行吗追问
nope
追答回车按少了
参考技术B gets(str[i].name);这个语句是以回车作为输入结束的,不会以空格作为结束。
请检查你输入分数前是否有换行输入。追问
还是不行啊,本来用scanf来赋值,只有第1次循环的时候才执行,后来才改成gets,结果还是一样
追答scanf("%1f",&a[i].score[j]);
-->
scanf("%f",&a[i].score[j]);
多了一个1
PHP中如何判断SQL语句是不是成功执行?
你可以直接把执行SQL语句的函数执行的结果保存为变量,然后判断例:我这里用的mysql_query函数哦:
<?php
///....坑爹的代码
$res=mysql_query($sql);
if($res)
echo '执行成功';
else
echo '执行失败';
?>
但是这样的执行成功只是你的语句正确的执行,但是不代表100%可以成功执行对数据库的操作,比如说你数据表里没有记录了,你执行delete语句,虽然成功了, 但是删除的行数是0,这是可能的。 参考技术A 用print_r输出一下数据,能输出就是成功执行拉。 参考技术B 我不知道SQL 我知道MYSQL; mysql_query('sql语句')函数能执行就返回结果集,不能则返回假,我想PHP中处理SQL的函数页有这功能,你测试一下有返回值没?
以上是关于for里面的scanf语句不执行,赋值不成功的主要内容,如果未能解决你的问题,请参考以下文章