-1
#include<stdio.h>
#include<conio.h>
FILE *fp;
int main()
{
  int val;
  char line[80];
  fp=fopen("\Users\P\Desktop\Java\a.txt","rt");
  while( fgets(line,80,fp)!=NULL )
   {
     sscanf(line,"%d",&val);
     printf("val is:: %d",val);
   }
   fclose(fp);
   return 0;
}

为什么在 fp=fopen("\Users\P\Desktop\Java\a.txt","rt") 行中出现编译错误?

4

3 回答 3

6

转义你的反斜杠。

fp=fopen("\\Users\\P\\Desktop\\Java\\a.txt","rt");
于 2013-10-09T16:17:08.470 回答
4
xx.c:8:12: error: \u used with no following hex digits
  fp=fopen("\Users\P\Desktop\Java\a.txt","rt");
           ^
xx.c:8:12: warning: unknown escape sequence '\P'
xx.c:8:12: warning: unknown escape sequence '\D'
xx.c:8:12: warning: unknown escape sequence '\J'

反斜杠的问题。反斜杠是 C 字符字符串中的转义符。

尝试这个

  fp=fopen("\\Users\\P\Desktop\\Java\\a.txt","rt");

或者这取决于您的操作系统:

  fp=fopen("/Users/P/Desktop/Java/a.txt","rt");
于 2013-10-09T16:17:14.063 回答
2

您可能熟悉"\n"(newline) 和"\t"(tab) 在 C 字符串中的使用方式。

编译器将查看任何\<Character>内容并尝试将其解释为Escape-Sequence

所以,在你写"\Users\P\Desktop\Java\a.txt"的地方,编译器试图将 \U, \P, \D,\J\a视为特殊的转义序列。
(似乎唯一有效的是\a,这是 Bell/Beep 序列。其他应该都产生错误)

正如其他人所说,用于\\插入文字反斜杠字符,而不是开始转义序列。

PS为您没有在您的问题中包含编译器消息而感到羞耻。最糟糕的问题都说“我遇到了错误”,而没有描述错误是什么。

于 2013-10-09T16:20:53.273 回答