我无法理解的一些错误

时间:2015-11-08 17:30:58

标签: c visual-studio-2010

所以我写了这个:

#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

3 个答案:

答案 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