所以我写了这个:
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main() {
float balance;
char type;
printf("Card balance: ");
scanf("%f", &balance);
do {
printf("Vehicle type: ");
scanf("%c", &type);
if (type != 'B' || type != 'b' || type != 'C' || type != 'c' || type != 'T' || type != 't') {
printf("Incorrect vehicle type!");
}
} while(type != 'B' || type != 'b' || type != 'C' || type != 'c' || type != 'T' || type != 't') ;
system("pause");
return 0;
}
当我尝试运行它时会出现这些错误:
1.
scanf
:此函数或变量可能不安全。请考虑使用scanf_s。要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS
。2.system undefined;假设extern返回int
答案 0 :(得分:2)
scanf
将变量的地址作为参数。所以,你需要做
scanf("%f", &balance);
scanf("%c", &type);
对于system
,您需要加入stdlib.h
答案 1 :(得分:1)
第一个问题表明您需要提供变量的地址,或指向您希望scanf返回其结果的变量的指针。试试这个:
scanf("%f", &balance);
编辑:缺失&amp;性格:))
答案 2 :(得分:0)
1)当调用scanf()
和函数族时,总是检查返回值(而不是参数值)以确保操作成功。
2)&#39;&#34;%f&#34;格式说明符将在输入流中保留newline
(&#39; \ n&#39;)字符。那么&#34;%c&#34;格式说明符将在第一次迭代和循环的每个奇数迭代时读取换行符(&#39; \ n&#39;)。
3)发布的代码(有效地)说`!(type == B and type == b and type == c ...)但是变量一次只能保存一个值。所以发布的代码将无法正常循环。建议类似:
do {
...
if( 1 != scanf(" %c", &type) ) { // handle error }
if (type != 'B' && type != 'b' && type != 'C' && type != 'c' && type != 'T' && type != 't') {
printf("Incorrect vehicle type!");
}
} while(type != 'B' && type != 'b' && type != 'C' && type != 'c' && type != 'T' && type != 't') ;
请注意调用scanf()
的格式字符串中的前导空格,这将占用前导空格。
请注意检查scanf()
的返回值以确保操作成功。
请注意&
参数上的前导type
,因为scanf()
需要其system("pause");
的地址。参数,因此它将知道输入/转换操作的结果放在何处。
4)while( int ch =getchar() && ch != '\n' && ch != EOF );
getchar();
不可移植,因为并非所有操作系统都能识别&#34;暂停&#34;作为有效的命令行输入。建议使用:
cell.favoriteButton.tag = indexPath.row