开发者

scanf(" %[^\n]", s); then how to strcmp in C?

开发者 https://www.devze.com 2023-03-06 01:30 出处:网络
scanf(\" %[^\\n]\", in); then for example , i input Knock Kno开发者_如何学JAVAck and hit enter but my code block inside
scanf(" %[^\n]", in);

then for example , i input Knock Kno开发者_如何学JAVAck and hit enter

but my code block inside

if (strcmp ("Knock Knock",out)==0)

does not work

please instruct me ,thanks a lot!

char in[80],out[80];

void input(){
    printf("Client: ");
    scanf("%[^\n]",in);

    fp=fopen("test","w");
    if (!fp) return ;
    fputs(in,fp);
    fclose(fp);
}

fp=fopen("test","r");
    fgets(out,81,fp);
    fclose(fp);
    fp=fopen("test","w");
    if (strcmp ("Knock Knock",out)==0)
        fputs("Server: Who is there?\n",fp);


First off, the layout of the code is very confusing, and as it stands, it would never compile. You have a function input() that you never seem to call, and you leave code outside the function that should be inside another function, or better yet, all of it should be contained inside a main() function so that it can be executed. Here is a cleaned up example for what you're wanting to-do:

#include <stdio.h>

char in[80],out[80];

int main()
{
    printf("Client: ");
    scanf("%[^\n]",in);  //you really should use fgets() here

    FILE* fp = fopen("test.txt","w");
    if (!fp)
    {
        perror("Failed to open file");
        return 1;
    }

    fputs(in,fp);
    fputs("\n",fp);
    fclose(fp);


    fp = fopen("test.txt","r");
    if (!fp)
    {
        perror("Failed to open file");
        return 1;
    }

    fgets(out,80,fp);
    fclose(fp);

    fp = fopen("test.txt","a+");
    if (!fp)
    {
        perror("Failed to open file");
        return 1;
    }

    if (strcmp ("Knock Knock\n",out)==0)
        fputs("Server: Who is there?\n",fp);

    return 0;
}

Some important notes:

1) fp has a file-type FILE*, since that is the return of fopen(), but you never declare it as such. So this would never compile with that error.

2) Every time you open a file with the w flag, it erases the entire contents of the file. So if you were intending on appending to the file to have a history of what your output from your program was, you need to use the a+ flag when calling fopen()

3) It would be nice to have some type of error print-out if you failed to open the file rather than scratching your head at why "test.txt" is empty after the program takes the input from stdin. Also if you're going to keep re-opening the file, check for a NULL each time since you're going to get unpredictable results from trying to work with a NULL file pointer (most likely a crash).

4) scanf() can result in nasty buffer over-runs from user-input (or malicious user input) ... use fgets() with stdin to a known-length buffer instead.

You should be able to compile this code now and run it. Works for me with gcc 4.4.3 on Ubuntu. After running, your "test.txt" file should look like:

Knock Knock
Server: Who is there?
0

精彩评论

暂无评论...
验证码 换一张
取 消